java - JPA Hibernate N+1 问题,即使使用 Join Fetch
问题描述
我对 JPA、Java 和 Hibernate 还很陌生,所以请耐心等待。
我有一个这样的 JPA 存储库:
@Repository
public interface OrderRepository extends JpaRepository<VPLabOrderLite, Integer> {
@Query(
"select o from VPLabOrderLite o "
+ "inner join fetch o.stay s "
+ "inner join fetch s.patient p "
+ "left join fetch o.orderedTests t "
+ "left join fetch t.result r "
+ "where p.id = :maAccession")
List<VPLabOrderLite> getOrders(@Param("maAccession") String maAccession);
}
问题是,当涉及到 t.result 上的最后一个连接提取时,它将为 o.orderedTests t 的每个实例生成一个返回到数据库的 sql 查询。这似乎与 t.result 属性上具有 @JoinColumns 属性的事实有关,因为当我将其更改为单个 @JoinColumn 属性时,其他查询消失(但连接的含义丢失了,所以我需要加入多个列)
这是 OrderedTest 实体中的结果属性
@OneToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(
name = "orderNo",
referencedColumnName = "orderId",
insertable = false,
updatable = false),
@JoinColumn(
name = "testId",
referencedColumnName = "testId",
insertable = false,
updatable = false)
})
private VPLabTestResultLite result;
我如何摆脱不需要的额外查询?
解决方案
推荐阅读
- c# - 无法让控制台日志记录在 .net core 2.0 中工作
- java - 检查所有 ListView CheckBoxes 时如何触发 JavaFX 事件?
- ruby - Google Analytics API ruby 客户端 - 多个指标
- google-analytics - Google Analytics 事件 - 日期范围值
- javascript - 从范围输入中检索实时值以在另一个函数中使用
- awk - AWK (igawk) @include 语句失败
- python - 由于 AttributeError,在 PyCharm 中导入 matplotlib.pyplot 失败:模块“PyQt5.QtGui”没有属性“QApplication”
- scala - 根据scala spark中的键合并数据框中的多条记录
- sql-server - 如何使用 getdate() + 20 秒插入每一行
- batch-file - 通过拖放处理文件和文件夹,过滤文件类型