一尘不染

JPA CascadeType.ALL不会删除孤儿

hibernate

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

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

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

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

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


阅读 236

收藏
2020-06-20

共1个答案

一尘不染

如果将它与Hibernate一起使用,则必须显式定义批注CascadeType.DELETE_ORPHAN,该批注可与JPA结合使用CascadeType.ALL

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

执行顺序

  1. 获取要删除的主行
  2. 获取子元素
  3. 删除所有子元素
  4. 删除主行
  5. 闭门会议

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

@OneToMany(mappedBy="foo", orphanRemoval=true)
2020-06-20