CascadeType.ALL,cascade = CascadeType.REMOVE和orphanRemoval有什么区别

时间:2015-01-09 06:57:00

标签: hibernate jpa persist

我搜索了答案,但我无法正确理解。当我们在CascadeType.ALL关系上设置CascadeType.REMOVE时,orphanRemoval,cascade = FetchType.EAGER@OneToMany之间有什么区别? 一旦我在删除记录时遇到问题。我使用了以下

@OneToMany(cascade = CascadeType.ALL, mappedBy = "companyEntity", fetch = FetchType.EAGER)
Set<EmployeeEntity> employeeEntities;

当我尝试删除员工记录时,它没有向我显示任何异常,也没有删除记录。但是,当我将CascadeType.ALL更改为CascadeType.REMOVE时,它才有效。 为何不使用CascadeType.ALL而不是CascadeType.REMOVE

感谢您提前做出简单的解释;)

1 个答案:

答案 0 :(得分:2)

This解释了部分问题。

  

&#39; OrphanRemoval =真&#39; Vs&#39; CascadeType.REMOVE&#39;

     

两个设置之间的区别在于对删除的响应   父实体指向的集合中的子对象。

     

如果指定了orphanRemoval = true,则删除的地址实例为   自动删除。如果仅指定了cascade = CascadeType.REMOVE   由于删除关系不是a,因此不会采取自动操作   删除操作。