java - 从 4.2.7/4.3.0.CR1 开始,Hibernate JPA OneToOne 孤立删除仍然不起作用

标签 java hibernate jpa jpa-2.0 one-to-one

已阅读 JPA 2.0 / Hibernate and "orphanRemoval": Just replacing an entity does not remove the old one , 以及相关票证 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 为目标 Post 实体发出一个 DELETE SQL 语句。

那么这个 @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) 问题是否已修复?如果是这样,我如何删除孤儿?非常感谢!

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

最佳答案

好的,您提到的问题与将关系设置为新实例时的级联删除有关。您正在设置为 null,因此它实际上并不相同。

我在 Hibernate 4.1.8 下测试了您的代码(即将 Post 设置为 null),它按预期工作,删除了 Post 条目。我测试了将 Post 设置为现有 Point 的新实例,并且触发删除,这与您提到的问题一致。

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

更新:

我不明白为什么 Fetch 提示会影响持久化操作,但我已经尝试使用它并且结果与以前一样。

关于java - 从 4.2.7/4.3.0.CR1 开始,Hibernate JPA OneToOne 孤立删除仍然不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20280271/

相关文章:

java - hibernate | Spring数据JPA | @一对一

java - DataNucleus 中的多对一单向关系

java Swing计时器依次执行几项任务

java - 如何使用 Eclipse Collections 将 MutableMap 转换为 ObjectDoubleMap?

hibernate - 使用Hibernate和PostGIS在同一查询中获取距离和域属性

java - 使用 jpa 在 jax-rs Rest 服务中使用泛型的障碍

java - 命名查询和继承

Java多线程解析txt文件

java - 在线程之间共享对象对性能有何影响?

java - 在 Hibernate 中正确实现一对多单向关系