当前位置: 首页 > 面试题库 >

从4.2.7 / 4.3.0.CR1开始,Hibernate JPA OneToOne孤立删除仍然无法正常工作

彭雨华
2023-03-14
问题内容

阅读了 JPA 2.0 / Hibernate和“orphanRemoval”:仅替换一个实体并不会删除旧的实体和相关票据https://hibernate.atlassian.net/browse/HHH-6484,我推断这已经(最终是)已在4.2.7和4.3.0.CR1版中修复。

但是,尝试

...
entityManager.getTransaction().begin();
Point point = entityManager.find(Point.class, pointId);
point.setPost(null);
entityManager.getTransaction().commit();
...

哪里

public class Point {
    ...
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    private Post post;
    ...
    public void setPost(Post post) {
        this.post = post;
    }
}

仍然不会使Hibernate DELETE为目标Post实体发出SQL语句。

那么,此@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)问题是否已解决?如果是这样,我如何删除这些orphan?非常感谢!

编辑:阅读您的答案后,我注意到我(错误地)省略了fetch=FetchType.LAZY在我上面的映射中指定的内容。


问题答案:

好的,将关系设置为新实例后,所涉及的问题与级联删除有关。您将设置为null,因此它实际上不是相同的。

我在Hibernate4.1.8下测试了您的代码(即,将Post设置为null),并且在删除Post条目后可以正常工作。我测试了将Post设置为现有Point的新实例,并且 触发删除操作,这与您提到的问题一致。

然后,我在4.2.7下进行了测试,并且在两种情况下均触发了删除操作,因此您所提到的问题确实在4.2.7中得以解决。

更新:

我看不到为什么Fetch提示会影响持久性操作,但是我尝试将其放在适当的位置,结果与以前一样。



 类似资料:
  • 问题内容: 我正在尝试在Hibernate 4.3.5 / JPA2对象中使用orphanRemoval,但它似乎没有按我预期的那样工作。但是,我不确定我做错了什么,还是Hibernate中的错误。 鉴于以下关系(为简便起见,省略了@ Version,getter和setter): 我希望,如果我从Provider.contracts列表中删除合同,那么它将从合同表中删除相应的行,并从附件表中删除

  • 问题内容: 我正在尝试在Hibernate 4.3.5 / JPA2对象中使用orphanRemoval,但它似乎没有按我预期的那样工作。但是,我不确定我做错了什么,还是Hibernate中的错误。 给定以下关系(为简洁起见,省略了@ Version,getter和setter): 我希望如果从Provider.contracts列表中删除合同,那么它将从合同表中删除相应的行,并从附件表中删除所有

  • 问题内容: 我正在尝试清理有很多孤立物品的桌子。 我正在通过查找空值来检查是否与另一个表有关系,从而达到这一目的。 我收到一个错误,左外部联接无效。 我正在寻找其他方法的建议,可以从这种破裂的关系中删除这些孤儿 问题答案: 试试这个:

  • 我们有一个问题,听起来像Hibernate中处理oneToMany列表(带索引)的orphanRemovation=true的bug。 以下是简化的映射: 儿童班: 鉴于此映射,以下场景将失败: 从DB获取父节点 给它加一个孩子 从DB(不是同一个实体)获取其他东西,产生部分同花顺 从父节点上移除子节点 离开交易 这是密码 在这种情况下,子分配被插入到DB中,并且在事务结束时不被删除。 但是,如果

  • 本文向大家介绍nhibernate 全部删除孤立项,包括了nhibernate 全部删除孤立项的使用技巧和注意事项,需要的朋友参考一下 示例 保存/更新/删除对象时,请检查关联并保存/更新/删除找到的所有对象。除此之外,当一个对象从关联中删除并且不与另一个对象(孤立的)关联时,也将其删除。

  • 问题内容: 我在使用带有以下映射的JPA删除孤立节点时遇到问题 我遇到了孤立角色挂在数据库周围的问题。 我可以使用特定于注释的Hibernate标记,但是显然我不想将解决方案绑定到Hibernate实现中。 编辑:似乎JPA 2.0将包括对此的支持。 问题答案: 如果将它与Hibernate一起使用,则必须显式定义批注,该批注可与JPA结合使用。 如果你不打算使用,则必须先明确删除子元素,然后再删