Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:级联合并引发分离异常_Java_Hibernate_Jpa - Fatal编程技术网

Java Hibernate:级联合并引发分离异常

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的热门话题,无论是在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的第一个实例被附加,第二个实例抛出异常


但是,是否没有办法强迫hibernate将重新连接的第一个版本的A简单地用于第二个版本?在我的上下文中,很难保证A只重新连接一次。

这似乎是一个已知的问题:

没有关于“为什么”的反馈,这是不固定的

我已经尝试将EventCache(引发异常的事件缓存)回滚到包含更少检查的4.1.2版本。我试过摆弄DefaultMergeEventListener,但没有用。我没有时间深入挖掘,所以我不得不删除@manytone关系中的所有层叠,以防止这个问题突然出现