Реклама

Hibernate getReference(): когда SELECT вообще не нужен

#Hibernate #SELECT #Проблема #Обычно #JOIN

Проблема N+1 запросов — классическая проблема ORM, с которой сталкивается практически каждый разработчик, работающий с Hibernate. Обычно рекомендуемыми решениями являются использование JOIN FETCH или EntityGraph , но существует еще один инструмент, который часто остается в тени — метод load() . Читать далее

Когда начинают говорить об оптимизации запросов Hibernate, разговор быстро приходит к N+1, join fetch, entity graph и настройке batch выборки. Но есть более простой случай, который легко пропустить.

Допустим нам нужно сохранить книгу. Её автор уже существует в базе и его ID пришёл в запросе, данные автора: имя, дата рождения и всё остальное нас вообще не интересуют. Нам нужно только записать author_id в таблицу book. Вот здесь возникает вопрос: зачем перед сохранением сначала получать автора? Разберёмся, как от него избавиться и причём здесь метод getReference().

Исходная модель данных

Две обычные сущности: