Hibernate / JPA trainee
Как решить N+1?
Ответ
(1) JPQL с JOIN FETCH: select o from Order o join fetch o.user. (2) @EntityGraph — атрибут на репозиторий-методе, говорит «подгрузить эти поля сразу». (3) Hibernate default_batch_fetch_size — группирует SELECT'ы по пачкам вместо запроса на каждую сущность.
Разбор: JOIN FETCH, @EntityGraph и hibernate.default_batch_fetch_size — стандартные способы убрать N+1. Глобальный EAGER не лечит проблему, а маскирует её и плодит N+1/декартовы произведения в других местах; second-level cache спасает лишь при повторном чтении тех же данных и не решает первичную загрузку; подзапрос на каждую сущность — это и есть N+1, а не его устранение.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.