如何解决使用 Set 数据结构管理 JPA 实体 - 使用 add 方法
我看到在实体中使用 HashSet 的示例,并且被视为其他数据类型。但我希望使用“添加”而不是设置整个对象
package com.baeldung.manytomany.model;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "student")
public class Student {
@Id
@Column(name = "id")
private Long id;
@ManyToMany
@JoinTable(name = "course_like",joinColumns = @JoinColumn(name = "student_id"),inverseJoinColumns = @JoinColumn(name = "course_id"))
private Set<Course> likedCourses = new HashSet<>();
@OnetoMany(mappedBy = "student")
private Set<Courserating> ratings = new HashSet<>();
@OnetoMany(mappedBy = "student")
private Set<CourseRegistration> registrations = new HashSet<>();
// additional properties
public Student() {
}
public Student(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Set<Course> getLikedCourses() {
return likedCourses;
}
public void setLikedCourses(Set<Course> likedCourses) {
this.likedCourses = likedCourses;
}
public Set<Courserating> getratings() {
return ratings;
}
public void setratings(Set<Courserating> ratings) {
this.ratings = ratings;
}
public Set<CourseRegistration> getRegistrations() {
return registrations;
}
public void setRegistrations(Set<CourseRegistration> registrations) {
this.registrations = registrations;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
有没有比
更好的方法public Set<Courserating> getratings() {
return ratings;
}
public void setratings(Set<Courserating> ratings) {
this.ratings = ratings;
}
我确实尝试过
public void addratings(Courserating rating) { this.ratings.add(rating); }
但是对象没有持久化。我认为保存学生应该照顾保存评级。我错过了什么?
解决方法
确定排序 (1)
public void addRatings(CourseRating rating) {
this.ratings.add(rating); rating.setBlah(this);
}
(2) 更新实体:
@OneToMany(cascade = CascadeType.ALL,mappedBy = "exam",orphanRemoval = true)
@OrderBy("id")
private Set<CourseRating> ratings = new HashSet<>();
正在使用 Embeddable,因此出现错误 - 为:class 生成了 null id ...因此从可用对象设置 id
ratings.setId(new ThatKey(some1,some2));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。