Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 休眠:与StackOverflowerr中的多对多结果合并_Java_Spring_Hibernate_Merge_Many To Many - Fatal编程技术网

Java 休眠:与StackOverflowerr中的多对多结果合并

Java 休眠:与StackOverflowerr中的多对多结果合并,java,spring,hibernate,merge,many-to-many,Java,Spring,Hibernate,Merge,Many To Many,我有一个多对多的关系,链接表有一个额外的字段。因此,根据以下教程,使用2个一对多关系建立关系: 我有两个实体,第三个实体定义了链接表,由@Embeddeble ID字段组成 该关系定义为: @OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.compound", cascade = CascadeType.ALL) @OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.structure", cas

我有一个多对多的关系,链接表有一个额外的字段。因此,根据以下教程,使用2个一对多关系建立关系:

我有两个实体,第三个实体定义了链接表,由@Embeddeble ID字段组成

该关系定义为:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.compound", cascade = CascadeType.ALL)

@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.structure", cascade = CascadeType.ALL)
WARE pk=@Embeddeble ID字段。插入和删除可以很好地工作,但是当我调用

session.merge(compound);
我得到一个StackOverflower错误,日志显示hibernate正在生成大量select语句。请注意,数据库正好包含1个关联,例如1个化合物包含2个结构。看起来hibernate进入了一个无休止的循环


我也在上看到过这个解决方案,但如何用它进行更新?

我支持SpaceTucker的回答。我不认为Persist和merge是一样的。Merge将在持久化对象之前加载该对象。坚持不行。因此,当您调用merge IMHO时,它需要加载惰性关系。如果你调用persist,它不会


您还可以使用@ElementDependent将相关的@OneToMany关系标记为依赖于另一个表。这就是我在联接表中使用附加列解决多对多关系的方法。

我的解决方案是在拥有端使用fecttype.EAGER,在子端使用FetchType.Lazy,在链接表中使用2个多对多关系。这样,我就可以从拥有方加载,而不会让LazyInitializationException和mergign按预期工作。

也许您正在通过多对多关系加载完整的多对多表。想象一下
A1
参考
B1
<代码>B1参考
A1
A2
<代码>A2参考
B2
。等等从关系的一端到另一端的每一次切换,都会得到一个额外的堆栈级别。持久化和加载工作正常,但调用“合并”时会出现问题。@SpaceTrucker,但是“合并”应管理以前的合并子操作访问的实体。初学者uu请您与测试用例分享您的完整实体,这样我们可以更好地帮助您。是的,但是获取实体是可行的。所以我可以坚持,在一个完全不同的会话加载它,没有问题。该问题仅在合并时发生。解决方案是将fetch=FetchType.LAZY添加到可嵌入ID类中的多通关系中。