HIbernate:找到同一集合的两个表示

时间:2015-06-07 22:25:31

标签: java hibernate jpa

使用Hibernate-EntityManager 4.3.5我得到了HibernateException:找到了同一个集合的两个表示。

场景是我有2个实体A和B;与第三个实体C有关系.A也与B有关系。让我们试着说清楚:

A - > OneToOne与B和C

B - > OneToMany with C

A和B加载到不同的事务(拦截器)中,但接下来我制作A.setXXX(B)并执行entityManager.merge(A); - A有一个C和B的实例,但它们代表相同的实例(相同的ID或主键)。 因此,我得到了这个错误 - 实际上,我有两个不同的C实例(一个用A,另一个用B)代表同一个实体(相同的PK)。怎么解决这个?我想做像B.setXXX(a.getXXX())这样的事情,但听起来很乱。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

感谢@Tobb和@Mihir,我可以弄清楚发生了什么 - 当我调用entityManager.merge(A)时,我遇到以下情况:

指向B和C; B指向C列表; C指向B的另一个实例,后者又指向C的List;

但是,B的两个实例代表相同的对象(相同的db PK)。这同样适用于C的列表,因此获得消息是公平的。同一集合的两个表示我必须删除级联=全部在关系B中 - > C因此合并不会横向图的这个分支。