JPA Hibernate N + 1 проблема даже с Join Fetch - PullRequest
2 голосов
/ 30 октября 2019

Я довольно новичок в 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 он вызовет запрос sql обратно в базу данных для каждого экземпляра o.orderedTests t. Похоже, это связано с тем, что свойство 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;

Как избавиться от лишних лишних запросов?

...