使Hibernate将分离的对象视为同一实例

时间:2015-03-17 14:19:09

标签: java hibernate jpa many-to-many persistence

我有两个表之间的多对多关系。我首先使用子对象填充父对象,反之亦然。当我偶然发现一个新的,在看不见的子对象之前,我将它添加到哈希映射中,并根据需要将父和子连接到它们的集合。每次迭代我都会检查孩子是否已经存在于地图中,如果它没有,我创建它并将其添加到地图中,然后当然将孩子和父母与他们的集合连接起来。但是,最后,当我坚持所有的父母时,孩子们被父对象引用多次持久化,我在子表中得到重复。我怎么能告诉Hibernate这些副本是同一个对象?

一个解决方案是坚持每个新的,在看不见的孩子之前,所以我可以获得它的id并且基于Hibernate现在这将是同一个对象。但是,这可以在没有持久命令的情况下实现,也就是说,当所有映射都被设置时,仅在最后调用persist(在父对象上)?

1 个答案:

答案 0 :(得分:0)

我所做的是,而不是地图,为父对象和子对象使用单独的集合。在那之后我只是持久化了父对象集合,那就是它(因为子对象不能存在父对象,但是父对象可以没有子对象,否则我也可以保留子对象)。

因此map的问题在于,虽然您从另一个键集合值向特定键集合值添加值,但它不引用同一个对象,即它为另一个键集合创建一个新对象,即为什么在这种情况下,在持久化键值(父对象)时会出现重复。