即使使用Join Fetch,JPA Hibernate N + 1问题

时间:2019-10-30 04:09:20

标签: java hibernate jpa

我对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;

如何摆脱不必要的额外查询?

0 个答案:

没有答案