java - 孤儿删除无法正常工作
问题描述
我有一个注释如下的一对多集合
@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);
}
上面的代码不起作用,实体没有从表中删除。我怎样才能做到这一点?
解决方案
假设Project
toPreference
关系的定义方式与Student
toPreference
那么您的问题来自您的Preference
实体是其他两个实体的子实体的事实相同。
当您从学生的偏好中删除它时,它被 Hibernate 标记为已删除的实体,但由于它仍被项目引用,Hibernate 将重新管理它,正如JPA 规范中针对此用例所指定的那样。查看第 3.2.2 和 3.2.3 节关于持久化和删除的信息。
要解决您的问题,您可以从所有方面删除它,或者检查连接表之间的关系是否@ManyToMany
不适合。Student
Project
Preference
推荐阅读
- reactjs - Reactjs 端口号仍然在 localhost 而不是 mysite URL 上运行
- arrays - 如何使用 Rust 中的构造函数创建结构数组?
- android - MPAndroidChart 更改字体(字体)
- php - 未捕获的类型错误:参数 2 传递给 Symfony\Component\EventDispatcher\EventDispatcher // Contao 4.7 & Symfony
- php - preg_match PHP 注释不包括引号
- apache-kafka - 启动时出现异常:NoSuchMethodException:org.springframework.kafka.core.KafkaTemplate。
() - java - 单选按钮的垂直滚动条
- php - 为什么我可以在这个 HTML 表中打印这个索引数组的值?
- haskell - splitOn 的内存占用?
- java - Firebase Android:获取存储在用户 ID 中的数据,然后获取随机 Push().getKey() 值