读过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(使用前将#替换为@)