gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:43 25 4
gpt4 key购买 nike

已阅读 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com