如何解决要在级联删除时删除的关系行
我在一对多关系中有以下实体:
@Entry
class Parent {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;
...
@OnetoMany(cascade = CascadeType.ALL,orphanRemoval = true,fetch = FetchType.EAGER)
private Collection<Child> children;
...
}
和
@Entry
class Child {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int id;
...
@Transient
private Parent parent;
...
}
所以——其中,数据库中有以下2个实体表
parent(id,...)
child(id,..)
以及这两个实体之间的关系表 - 由于 @OnetoMany
关系
parent_child(parent_id,child_id)
假设 parent_id=4
具有 child_id=7
,因此 parent_child
表具有行 (parent_id=4,child_id=7)
。
当我删除 child id =7 时,(parent_id=4,child_id=7)
表中的 parent_child
不是应该作为其中的一部分删除吗?即使从子表中删除了相应的子表,我仍然在 parent_child
表中看到该行。
我正在使用存储库(实现 CrudRepository
)来删除该子项。
//////////////
更新:
通过 parent_child(parent_id,child_id)
,我指的是 hibernate 在后台生成的关系表,用于维护 parent
和 child
表之间的关系。
出于好奇,直接在 sql 上进入了这个表。这些就是我所看到的。我预计(仍然如此)既然 (parent_id=4,child_id=7)
从地球表面掉下来,child_id=7
行会消失。但没有。
解决方法
你必须像这样映射你的实体类。
@ManyToOne
@JoinColumn(name = "parent_id",referencedColumnName = "id",nullable = false,cascade = CascadeType.ALL,fetch = FetchType.EAGER)
private Parent parent;
@OneToMany(mappedBy = "parent",orphanRemoval = true,fetch = FetchType.EAGER)
private Collection<Child> children;
,
删除
@Transient
private Parent parent;
并在子实体中进行@ManyToOne 映射。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。