【发布时间】:2012-09-28 09:09:04
【问题描述】:
如果链接表有一个附加字段,我有一个多对多的关系。因此,根据以下教程,该关系是通过 2 个一对多关系完成的:
我有 2 个实体,第三个实体定义了链接表并由 @Embeddable ID 字段组成。
关系定义为:
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.compound", cascade = CascadeType.ALL)
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.structure", cascade = CascadeType.ALL)
是 pk = @Embeddable ID 字段。插入和删除工作正常但是当我打电话时
session.merge(compound);
我得到一个 StackOverflowError 并且日志显示 hibernate 正在制作大量的选择语句。请注意,数据库恰好包含 1 个关联,例如。 1 个化合物包含 2 个结构。看起来hibernate进入了一个无限循环。
我也在 http://giannigar.wordpress.com/2009/09/04/mapping-a-many-to-many-join-table-with-extra-column-using-jpa/ 上看到过这个解决方案,但是你如何更新这个解决方案?
【问题讨论】:
-
也许您正在通过多对多关系加载完整的多对多表。想象一下
A1引用B1。B1引用A1和A2。A2引用B2。等等。每次从关系的一侧切换到另一侧时,您都会获得一个额外的堆栈级别。 -
持久化和加载工作,但调用合并时出现问题。
-
@SpaceTrucker,不过合并应该管理之前合并子操作访问的实体。初学者_请您与测试用例分享您的完整实体,以便我们更好地帮助您。
标签: java spring hibernate merge many-to-many