Проверяет знание оптимизации запросов в ORM.
Fetch Join: JOIN FETCH в JPQL.
EntityGraph: Аннотация @EntityGraph.
Batch Size: @BatchSize для ленивой загрузки.
Пример N+1:
@Entity
class Author {
@OneToMany(mappedBy = "author", fetch = LAZY)
List<Book> books;
}
// Проблема: Для каждого автора выполняется отдельный запрос книг.
List<Author> authors = em.createQuery("SELECT a FROM Author a").getResultList();Решение:
JPQL с JOIN FETCH:
List<Author> authors = em.createQuery(
"SELECT a FROM Author a JOIN FETCH a.books", Author.class
).getResultList();EntityGraph:
@EntityGraph(attributePaths = {"books"})
@Query("SELECT a FROM Author a")
List<Author> findAllWithBooks();