gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:21 25 4
gpt4 key购买 nike

我有一个多对多的关系,链接表有一个额外的字段。因此,根据以下教程,关系是通过 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)

是 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/ 上看到过这个解决方案但是你如何更新这个?

最佳答案

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

关于java - Hibernate:在 StackOverflowError 中合并多对多结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12776262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com