Hibernate / JPA middle
Что такое Проблема N+1?
Ответ
При итерации по списку на каждую связанную сущность делается отдельный SELECT. Решения: JOIN FETCH, @EntityGraph, @BatchSize, @Fetch(FetchMode.SUBSELECT).
Разбор: Суть N+1 в чтении: один запрос достаёт N корневых сущностей, а затем для каждой выполняется отдельный SELECT за связанной коллекцией или сущностью — итого N+1 запросов. Ловушка дистракторов в подмене темы: декартово произведение от JOIN, исчерпание пула и двойная запись — это другие проблемы, а правильные средства борьбы именно с N+1 — JOIN FETCH, @EntityGraph, @BatchSize и SUBSELECT.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.