Проверяет понимание связи между LAZY загрузкой и проблемой N+1 запросов в ORM.
LAZY загрузка (ленивая загрузка) — это стратегия, при которой связанные данные загружаются из базы данных только в момент первого обращения к ним. Проблема N+1 возникает, когда приложение выполняет один запрос для получения списка сущностей (например, 10 пользователей), а затем для каждого пользователя выполняет отдельный запрос для загрузки связанных данных (например, заказов). В итоге получается 1 + N запросов вместо одного.
LAZY загрузка сама по себе не предотвращает N+1, а наоборот, может его спровоцировать. Если разработчик обращается к ленивой связи внутри цикла, каждый вызов триггерит новый SQL-запрос. Например:
List<User> users = userRepository.findAll(); // 1 запрос
for (User user : users) {
System.out.println(user.getOrders().size()); // N запросов
}Здесь LAZY загрузка приводит к N+1. Чтобы избежать этого, нужно явно указать ORM загрузить связи заранее.
SELECT u FROM User u JOIN FETCH u.orders.LAZY загрузка — это инструмент оптимизации, но не панацея от N+1. Её следует комбинировать с другими техниками, такими как JOIN FETCH или batch fetching, чтобы избежать лишних запросов. Правильный выбор стратегии загрузки зависит от контекста: для списков с большим количеством записей лучше использовать явные запросы с предзагрузкой связей.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
SQL
Ключевые слова
Подпишись на Java Developer в телеграм