Как решить 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.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться