我有一个一对多的集合,注释如下
@Entity
@Table(name = "students")
public class Student {
@OneToMany(mappedBy = "student", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
@OrderColumn(name ="index")
private List<Preference> preferences;
}
首选项实体
@Entity
@Table(name = "preferences")
public class Preference {
// id
@ManyToOne
@JoinColumn(name = "student_id")
private Student student;
@ManyToOne
@JoinColumn(name = "project_id")
private Project project;
private Integer index;
}
我尝试从列表中删除一个元素,如下所示:
public void removePreference(Preference preference) {
preferences.remove(preference);
preference.setStudent(null);
}
以上代码不起作用,实体未从表中删除。我如何才能做到这一点?
发布于 2018-06-10 03:14:04
假设Project
到Preference
的关系的定义方式与Student
到Preference
的定义方式相同,那么您的问题来自于您的Preference
实体是另外两个实体的子级。
当您将其从学生的首选项中删除时,Hibernate会将其标记为已删除的实体,但由于它仍被项目引用,因此Hibernate将重新管理它,正如在此用例的JPA specification中指定的那样。查看3.2.2和3.2.3节关于持久化和删除的信息。
为了解决您的问题,您可以从所有方面删除它,或者检查Student
和Project
之间的@ManyToMany
关系是否不适合使用Preference
作为连接表。
https://stackoverflow.com/questions/50776479
复制相似问题