如何解决JPA CascadeType.ALL不删除子记录
| 考虑这个用例。class Category {
@OnetoMany(cascade=CascadeType.ALL)
List<Application> applications = new ArrayList<Application>();
}
class Application {
@ManyToOne
Category category;
}
我了解,在这种情况下,当类别将被删除时,应用程序也将被删除。但是谁来管理联接表呢?为该关系生成的Category_Application表。
解决方法
无论“ 1”如何,都应始终删除联接表行。
对于拥有所有权的双向
ManyToMany
(非ѭ3side),将删除行。
由于后面有一个ManyToOne
,看来您应该使用mappedBy
,而不是联接表。
是否存在未删除它们的问题,或者在删除它们之前遇到约束错误?另外,当您呼叫remove()
时,请确保您的收藏集不为空。尝试在调用remove
之前从集合中删除所有内容。
,听起来这是与以下问题相同的问题:
JPA CascadeType.ALL不会删除孤儿
基本上,当您有一个“ 8”时,JPA默认情况下会假定子对象具有独立的生命周期,并且可能与多个父对象关联。删除父级并不一定会删除子级。在JPA 2.0中指定ѭ9(或Eclipselink@PrivateOwned
或HibernateCascadeType.DELETE_ORPHAN
)告诉JPA在删除父记录时删除子记录。
如果您始终希望将子记录生命周期与其父项相关联,则可能还需要考虑@ElementCollection而不是@OneToMany,这将产生类似的行为,但不能让您独立于父项持久保留子对象。 (即@ElementCollection的子对象不是@Entities。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。