hibernate父子项更新错误的更新顺序

时间:2012-10-05 15:05:53

标签: hibernate collections

我有一个使用@OneToMany和@ManyToOne注释实现父子关系的树。

每个孩子都有@ManyToOne父字段,每个父母都有@OneToMany。

儿童和父母都是异质的,任何类型的实体都可能属于任何父母类型的父母。

在这种情况下,Hibernate创建并管理与额外的parent_child表的关系,就像它对@ManyToMany关系一样。

一切顺利(我能够创建和删除任何对象),直到我尝试实现更改父对象,并且违反约束。

该操作实施如下:

oldParent.children.remove(child);
child.parent = newParent;
newParent.children.add(child);

正如预期的那样,Hibernate会生成3个更改请求:一个用于更新child.parent值,另外两个用于更新新父项和新父项的子集合。

问题是收集更新的顺序错误:它尝试在删除旧关系之前添加新关系,这会导致违反约束,因为不允许使用两个父项。

如何强制更新正确的顺序?或者如何在这种情况下避免使用附加表?

2 个答案:

答案 0 :(得分:2)

首次删除后,您应该调用flush。这将删除初始父关系。现在,如果你重新加载父母和孩子,你应该能够将它们相互关联。

答案 1 :(得分:0)

实际上,除非你需要,否则你不需要在任何阶段调用flush()。我不能说Hibernate而是JPA标准,实现必须按照遵守域所要求的约束顺序排列语句。

请与Batoo JPA一起尝试相同的案例,并告诉我们它是否适合您。否则我们可以帮到你。

相关问题