我有一个使用 @OneToMany 和 @ManyToOne 注释实现的父子关系树。
每个孩子都有@ManyToOne 父字段,每个父母都有@OneToMany。
孩子和父母都是异构的,任何类型的实体都可能属于任何父母类型的父母。
在这种情况下,Hibernate 使用附加的 parent_child 表创建和管理关系,就像它为 @ManyToMany 关系所做的那样。
一切都很顺利(我能够创建和删除任何对象),直到我尝试实现更改对象父对象并违反约束。
操作执行如下:
oldParent.children.remove(child);
child.parent = newParent;
newParent.children.add(child);
正如预期的那样,Hibernate 生成了 3 个更改请求:一个更新 child.parent 值,两个更新新旧父母的子集合。
问题在于集合更新的错误顺序:它尝试在删除旧关系之前添加新关系,这会导致违反约束,因为不允许有两个父关系。
如何强制更新的正确顺序?或者在这种情况下如何避免使用附加表?