Проблема N+1 возникает при работе с ORM, когда для получения N сущностей с их связанными данными выполняется 1 запрос для основной коллекции и затем N дополнительных запросов для каждой связи.
Если у нас 100 пользователей, выполнится 101 запрос вместо одного.
Решения:
🔹 JOIN FETCH в JPQL:
@Query("SELECT u FROM User u JOIN FETCH u.orders")
List<User> findAllWithOrders();🔹 EntityGraph:
@EntityGraph(attributePaths = {"orders"})
List<User> findAll();🔹 Batch Size (не решает проблему, но группирует запросы):
@BatchSize(size = 10)
private List<Order> orders;
Выбор решения зависит от конкретной ситуации: для единичных запросов подходит JOIN FETCH, для повторяющихся паттернов - EntityGraph или Batch Size.
🐸 Библиотека собеса по Java
#spring