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

Make Hibernate treat detached objects as same instance

我在两个 table 之间建立了多对多关系。我首先用 child objects 填充 parent objects ,反之亦然。当我偶然发现一个新的、之前看不见的 child object 时,我将它添加到哈希映射中,并将 parent 和 child 与它们的 collections 连接为需要。每次迭代我检查 child 是否已经存在于地图中,如果不存在,我创建它并将其添加到地图中,然后当然连接 child 和 parent 和他们的 collections。但是,最后,当我保留所有 parents 时,children 会被 parent objects 引用多次,我得到在 child table 中重复。我如何告诉 Hibernate 这些重复项是同一个 object?

一个解决方案是坚持每个新的,在看不见之前 child,这样我就可以得到它的 ID 并且基于 Hibernate 现在会认为这是相同的 object。但是,这是否可以在不执行持久命令之间的情况下实现,也就是说,仅在所有映射都已设置的最后调用持久(在 parent objects 上)?

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

所以 map 的问题是,尽管您从另一个键集合值向特定键集合值添加一个值,但它不引用相同的对象,即它为另一个键集合创建一个新对象,这就是为什么在这种情况下您在保留键值(父对象)时会得到重复项。