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