Spring Data JPA findAll() с отношением «Один ко многим» в одном запросе

#kotlin #select #spring-data-jpa #one-to-many

Вопрос:

Я использую метод JPA findAll() для извлечения всех строк вместе с любыми строками в дочерней таблице. Проблема в том, что существуют тысячи записей, и JPA не извлекает их все за один раз, он сначала запрашивает родительскую таблицу, а затем для каждой родительской записи запрашивает дочернюю таблицу одну за другой. Есть ли способ сделать это за один раз без цикла, такого как извлечение, которое в настоящее время выполняет JPA?

Я знаю об FetchMode.JOIN этом, но это не работает findAll . Он работает с одной записью для родительской сущности.

Если это возможно сделать за один раз и есть ли способ также подсчитать количество строк дочерней таблицы для каждой строки в родительской таблице за один раз без повторного выполнения отдельного запроса?

ПРАВКА: Хорошо, FetchType.SUBSELECT я решил свою проблему. Единственное, что осталось, — это вычислить количество дочерних таблиц сейчас.

То, что я пытаюсь сделать, это что-то вроде:

 data class Customer(
   val name: String
   @OneToMany
   val addresses: List<Address>,

   //Count of another child table which I don't want to fetch as those  could be too huge to fetch
   @Query("select count(o) from Order o where o.customer.id=id")
   val countOrders: Int
)