Hibernate:在StackOverflowError中合并多对多结果

beg*_*er_ 6 java merge spring many-to-many hibernate

我有一个多对多的关系,链接表有一个额外的字段.因此,根据以下教程,关系是通过2个一对多关系完成的:

http://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column-annotation/comment-page-1/#comment-122181

我有2个实体,第三个实体定义了链接表并由@Embeddable ID字段组成.

这种关系定义为:

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

@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.structure", cascade = CascadeType.ALL)
Run Code Online (Sandbox Code Playgroud)

是pk = @Embeddable ID字段.但是,当我打电话时,插入和删除工作正常

session.merge(compound);
Run Code Online (Sandbox Code Playgroud)

我得到一个StackOverflowError并且日志显示hibernate正在制作大量的select语句.请注意,数据库只包含1个关联,例如.1种含2种结构的化合物.看起来hibernate进入无限循环.

我也在http://giannigar.wordpress.com/2009/09/04/mapping-a-many-to-many-join-table-with-extra-column-using-jpa/上看过这个解决方案,但是如何你有更新吗?

beg*_*er_ 3

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