微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JPA CascadeType.ALL不删除子记录

如何解决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
或Hibernate
CascadeType.DELETE_ORPHAN
)告诉JPA在删除父记录时删除子记录。 如果您始终希望将子记录生命周期与其父项相关联,则可能还需要考虑@ElementCollection而不是@OneToMany,这将产生类似的行为,但不能让您独立于父项持久保留子对象。 (即@ElementCollection的子对象不是@Entities。)     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。