Я испытываю затруднения при понимании, как избежать выбора n+1 в jpa или быть в спящем режиме.
Из того, что я читал, существует 'левая выборка соединения', но я не уверен, работает ли она все еще больше чем с одним списком (oneToMany)..
Кто-то мог объяснить это мне или дать мне ссылку с четким полным объяснением?
Я сожалею, если это - вопрос о новичке, но я не могу найти реальную четкую статью или документ об этой проблеме.
Спасибо
Помимо соединения, вы также можете использовать подзапросы.Это приводит к выполнению 2 запросов (или, как правило, m + 1, если у вас есть m списков), но он также хорошо масштабируется для большого количества списков, в отличие от выборки соединений.
При объединенной выборке, если вы извлекаете 2 таблицы (или списки) с вашим объектом, вы получаете декартово произведение , то есть все комбинации пар строк из двух таблиц. Если таблицы большие, результат может быть огромным , например если в обеих таблицах 1000 строк, декартово произведение содержит 1 миллион строк!
Лучшей альтернативой для таких случаев является использование подзапросов. В этом случае вы должны выполнить 2 выбора - по одному для каждой таблицы - поверх основного выбора (который загружает родительский объект), поэтому в целом вы загружаете 1 + 100 + 100 строк с 3 запросами.
Для записи то же самое с отложенной загрузкой приведет к 201 отдельным выборкам, каждая из которых загружает одну строку.
Обновление: вот несколько примеров: