JPA CascadeType.ALL 不会删除孤立项

2022-08-31 07:56:03

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

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

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

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

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


答案 1

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

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

执行顺序

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

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

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

答案 2

如果您使用的是 JPA 2.0,那么现在可以使用注记的属性来除去孤立项。orphanRemoval=true@xxxToMany

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


推荐