Java Hibernate:级联合并引发分离异常
这似乎是一个关于hibernate的热门话题,无论是在stackoverflow()还是outside()上,但我仍然不清楚 我有一个对象,我将它与实体管理器E1合并。我关闭E1。 我有对象B,它引用了我们与E1合并的A的实例。B已在A上级联合并和持久化 我将B与entitymanager E2合并,得到异常“存储实体[…]时发生错误。实体副本[…]已分配给其他实体[…] 我所有的搜索似乎都表明他们在hibernate版本4.1.3中引入了一些额外的检查。事实上,如果我运行与4.1.2完全相同的代码,它就会工作 额外的检查应该包含一个适当的equals()和hashCode()实现,但是我的对象有这些,我已经向它们添加了调试日志:它们永远不会被调用 我可以通过删除级联功能来“解决”它,但是…嗯…它很方便 我如何解决这个问题,以便级联可以按预期工作 更新 显然,目前的问题是B实际上引用A两次。 所以我假设第二个分离的A抛出异常。我可以看到B合并后,A的第一个实例被附加,第二个实例抛出异常Java Hibernate:级联合并引发分离异常,java,hibernate,jpa,Java,Hibernate,Jpa,这似乎是一个关于hibernate的热门话题,无论是在stackoverflow()还是outside()上,但我仍然不清楚 我有一个对象,我将它与实体管理器E1合并。我关闭E1。 我有对象B,它引用了我们与E1合并的A的实例。B已在A上级联合并和持久化 我将B与entitymanager E2合并,得到异常“存储实体[…]时发生错误。实体副本[…]已分配给其他实体[…] 我所有的搜索似乎都表明他们在hibernate版本4.1.3中引入了一些额外的检查。事实上,如果我运行与4.1.2完全相同的
但是,是否没有办法强迫hibernate将重新连接的第一个版本的A简单地用于第二个版本?在我的上下文中,很难保证A只重新连接一次。这似乎是一个已知的问题: 没有关于“为什么”的反馈,这是不固定的 我已经尝试将EventCache(引发异常的事件缓存)回滚到包含更少检查的4.1.2版本。我试过摆弄DefaultMergeEventListener,但没有用。我没有时间深入挖掘,所以我不得不删除@manytone关系中的所有层叠,以防止这个问题突然出现