Java Hibernate在哪些情况下级联删除?
目前我试图深入研究一些冬眠机制,我真的很难理解级联机制 我发现了(当然还有更多的网站,但这是一个很好的总结)关于Cascade.REMOVE和孤儿移除的内容,我觉得它们向我充分解释了这些机制 然而,在测试我的数据模型时,我偶然发现了一个问题,使我再次怀疑我的知识 我有两个实体的定义如下:Java Hibernate在哪些情况下级联删除?,java,hibernate,jpa,Java,Hibernate,Jpa,目前我试图深入研究一些冬眠机制,我真的很难理解级联机制 我发现了(当然还有更多的网站,但这是一个很好的总结)关于Cascade.REMOVE和孤儿移除的内容,我觉得它们向我充分解释了这些机制 然而,在测试我的数据模型时,我偶然发现了一个问题,使我再次怀疑我的知识 我有两个实体的定义如下: @Entity public class Parent { .... @OneToMany(mappedBy="parent", fetch=FetchType.EAGER, cascade={
@Entity
public class Parent {
....
@OneToMany(mappedBy="parent", fetch=FetchType.EAGER, cascade={ CascadeType.REMOVE })
@Fetch(FetchMode.SUBSELECT)
private List<Child> children;
...
}
----
@Entity
public class Child {
...
@ManyToOne
private Parent parent;
....
}
因此,在我看来,Hibernate只是试图删除父实体,而我认为它实际上会首先级联并删除子实体。我在Stackoverflow上找到的以下答案似乎支持观察到的行为:
我知道我的问题的解决方案是首先手动删除相关的子实体
,但对于潜在增长的数据模型,我显然更喜欢自动解决方案
所以我的问题是:在我的情况下,哪个答案是正确的,为什么?Hibernate显然不会在我的例子中级联删除,但这是因为我的配置错误还是设计错误
Referential integrity constraint violation: "FK_TA9YL3WAEU74UG94QYYBU4SWY: PUBLIC.CHILD FOREIGN KEY(PARENT_ID) REFERENCES PUBLIC.PARENT(ID) (1)"; SQL statement:
delete from Parent where id=?