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

2023-12-11

读过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();
...

where

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目标的 SQL 语句Post entity.

也有这个@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)问题是否已解决?如果是这样,我该如何删除孤儿?非常感谢!

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


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

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

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

Update:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐