java - JPA CascadeType.ALL 不删除孤儿

标签 java hibernate orm jpa jpa-2.0

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

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

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

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

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

最佳答案

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

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

执行顺序

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

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

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

关于java - JPA CascadeType.ALL 不删除孤儿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/306144/

相关文章:

java - 在android中使用soap webservices的mysql数据库连接

java - 如何在Java中解析JSON

java - Hibernate 4.3 索引注释

python - 用户表中的外键已保存但立即回滚

java - 使用 junit 测试输入

java - Instant.toEpochMilli()可以用作唯一id吗?

hibernate HQL : how to use a complex left join fetch

java - 如何在 SimpleJpaRepository 中执行 order_by?

php - 使用 DataMapper ORM for php 映射字段名称

orm - 使用 ORM 工具(框架)有什么优势?