首页 > 解决方案 > Jpa/Hibernate:避免在每个关系都是唯一的实体中的所有连接表上连接

问题描述

简单的例子。

表资源。表 Line_A。表 Line_B。

连接表 Resource_Line_A 连接表 Resource_Line_B

Line_A 的资源无法附加到 Line_B,反之亦然。

如果我想在 2021 年将所有资源附加到 Line_A,我可以在本机 sql 中编写

Select * from Resource r join Resource_Line_A rla on r.id = rla.resource_id join Line_A la on rla.line_a_id = la.id where la.year = 2021

在带有存储库的 Java 中,我有lineARepository.findByYear(2021),但 Hibernate 向我展示了这个查询

Select * from Resource r join Resource_Line_A rla on r.id = rla.resource_id join Line_A la on rla.line_a_id = la.id join Resource_Line_B rlb on r.id = rlb.resource_id join Line_B lb on rlb.line_b = lb.id where la.year = 2021

如何避免 Line_B 表上的无用连接?所有关系都是 fetchtype.Lazy

标签: javahibernatejpa

解决方案


我猜你正在使用@OneToOne(mappedBy = "..", fetch = LAZY)for lineB?如果是这样,您必须知道 Hibernate 5.3 有一个在 5.4 中修复的错误,导致此类关联被急切地获取。


推荐阅读