当前位置:  开发笔记 > 编程语言 > 正文

JPA CascadeType.ALL不会删除孤儿

如何解决《JPACascadeType.ALL不会删除孤儿》经验,为你挑选了5个好方法。

我在使用带有以下映射的JPA删除孤立节点时遇到问题

@OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner")
private List bikes;

我遇到了挂在数据库周围的孤立角色的问题.

我可以使用注释org.hibernate.annotations.CascadeHibernate特定标记,但显然我不想将我的解决方案绑定到Hibernate实现.

编辑:似乎JPA 2.0将包括对此的支持.



1> Varun Mehta..:

如果您将它与Hibernate一起使用,则必须明确定义注释CascadeType.DELETE_ORPHAN,该注释可与JPA结合使用CascadeType.ALL.

如果您不打算使用Hibernate,则必须先明确删除子元素,然后删除主记录以避免任何孤立记录.

执行顺序

    获取要删除的主行

    获取子元素

    删除所有子元素

    删除主行

    关闭会议

使用JPA 2.0,您现在可以使用选项orphanRemoval = true

@OneToMany(mappedBy="foo", orphanRemoval=true)


JPA 2.0标准现在将deleteOrphan作为@OneToMany的属性如果您使用的是最新的hibernate,您可以执行@OneToMany(...,deleteOrphan = true)
谢谢我最终走了这条路线,我认为这对于JPA规范来说有点过分了.

2> Kango_V..:

如果您使用的是JPA 2.0,则现在可以使用注释的orphanRemoval=true属性@xxxToMany来删除孤立.

实际上,CascadeType.DELETE_ORPHAN已经在3.5.2-Final中弃用了.


实际上我认为orphanRemoval = true意味着别的东西,即当我从它的父集合中删除它时删除它.请参阅http://download.oracle.com/javaee/6/tutorial/doc/bnbqa.html#giqxy
+1用于提供此问题的最新答案!
**orphanRemoval = true**也不起作用.它必须以旧的方式完成.
据我所知,它不适用于@ManyToMany.

3> Sergii Shevc..:
???????????????????????????????????????????????????????????
?   Action    ?  orphanRemoval=true ?   CascadeType.ALL   ?
???????????????????????????????????????????????????????????
?   delete    ?     deletes parent  ?    deletes parent   ?
?   parent    ?     and orphans     ?    and orphans      ?
???????????????????????????????????????????????????????????
?   change    ?                     ?                     ?
?  children   ?   deletes orphans   ?      nothing        ?
?    list     ?                     ?                     ?
???????????????????????????????????????????????????????????



4> uı6ʎɹnɯ ꞁəıu..:

如果您将JPA与EclipseLink一起使用,则必须设置@PrivateOwned注释.

文档:Eclipse Wiki - 使用EclipseLink JPA扩展 - 第1.4章如何使用@PrivateOwned注释



5> 小智..:

您可以使用@PrivateOwned删除孤儿,例如

@OneToMany(mappedBy = "masterData", cascade = {
        CascadeType.ALL })
@PrivateOwned
private List dataList;


感谢@reshma应该注意@PrivateOwned是一个eclipselink JPA扩展.
推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有