首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA CascadeType.ALL不会删除孤立项

JPA CascadeType.ALL不会删除孤立项
EN

Stack Overflow用户
提问于 2008-11-20 17:31:33
回答 11查看 183.7K关注 0票数 140

我在使用JPA删除孤立节点时遇到了问题,映射如下

代码语言:javascript
复制
@OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner")
private List<Bikes> bikes;

我在数据库中遇到了孤立角色的问题。

我可以使用注释org.hibernate.annotations.Cascade Hibernate特定标记,但显然我不想将我的解决方案与Hibernate实现捆绑在一起。

编辑:似乎JPA2.0将包含对此的支持。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-11-20 22:54:34

如果您将其与Hibernate一起使用,则必须显式定义注释CascadeType.DELETE_ORPHAN,该注释可以与JPA CascadeType.ALL一起使用。

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

执行顺序

  1. 获取要删除的主行
  2. 获取子元素
  3. 删除所有子elements
  4. delete主行
  5. close session

在JPA2.0中,您现在可以使用选项orphanRemoval = true

代码语言:javascript
复制
@OneToMany(mappedBy="foo", orphanRemoval=true)
票数 168
EN

Stack Overflow用户

发布于 2010-05-28 19:18:37

如果您使用的是JPA2.0,那么您现在可以使用@xxxToMany注释的orphanRemoval=true属性来删除孤立项。

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

票数 113
EN

Stack Overflow用户

发布于 2013-10-29 05:28:02

代码语言:javascript
复制
╔═════════════╦═════════════════════╦═════════════════════╗
║   Action    ║  orphanRemoval=true ║   CascadeType.ALL   ║
╠═════════════╬═════════════════════╬═════════════════════╣
║   delete    ║     deletes parent  ║    deletes parent   ║
║   parent    ║     and orphans     ║    and orphans      ║
╠═════════════╬═════════════════════╬═════════════════════╣
║   change    ║                     ║                     ║
║  children   ║   deletes orphans   ║      nothing        ║
║    list     ║                     ║                     ║
╚═════════════╩═════════════════════╩═════════════════════╝
票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/306144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档