hibernate - CascadeType.ALL、cascade = CascadeType.REMOVE 和 orphanRemoval 之间有什么区别

标签 hibernate jpa persist

我搜索了答案,但无法正确找到答案。当我们设置FetchType.EAGER时,CascadeType.ALL、cascade = CascadeType.REMOVEorphanRemoval有什么区别@OneToMany 关系? 有一次我在删除记录时遇到问题。我用过以下内容

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

当我尝试删除员工记录时,它没有向我显示任何异常,也没有删除记录。但是当我将 CascadeType.ALL 更改为 CascadeType.REMOVE 时,它就可以工作了。 为什么它不能与 CascadeType.ALL 一起使用,而是与 CascadeType.REMOVE 一起使用?

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

最佳答案

This解释了你的部分问题。

'OrphanRemoval=true' Vs 'CascadeType.REMOVE'

The difference between the two settings is in the response to removing child objects from the collection pointed by parent entity.

If orphanRemoval=true is specified the removed address instance is automatically removed. If only cascade=CascadeType.REMOVE is specified no automatic action is taken since removing a relationship is not a remove operation.

关于hibernate - CascadeType.ALL、cascade = CascadeType.REMOVE 和 orphanRemoval 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27855362/

相关文章:

java - 如何让 Hibernate 4 停止抛出 "Deleting detached instance"?

java - JPA:为什么每个具体类实现表是可选的?

java - 实体 JPA 中的 session 范围属性

java - 在@PostUpdate中获取@PreUpdate值

jqgrid 在重新加载时保留过滤器

java - Wicket:如何处理长时间运行的任务

java - 扩展 Hibernate 的 ResourceBundleMessageInterpolator

symfony - Doctrine 刷新()错误: Expected value of type "Doctrine\Common\Collections\Collection|array"

java - 没有可用类型的合格 bean : expected at least 1 bean which qualifies as autowire candidate

java - 如何使用 spring-boot 和 JPA 持久化包含另一个未持久化实体的多个相同实例的新实体?