Вопрос проверяет понимание загрузки сущностей, работы прокси и влияния ORM на производительность.
Lazy-loading означает, что связанные данные загружаются не сразу, а при первом обращении к ним. Это позволяет избежать лишних запросов к базе данных. По умолчанию многие связи в JPA являются lazy. Реализация обычно основана на прокси-объектах. При неправильном использовании может приводить к LazyInitializationException.
Lazy-loading — один из ключевых механизмов оптимизации в ORM.
Lazy-loading — это стратегия загрузки, при которой связанные сущности подгружаются только при фактическом обращении к ним.
Когда сущность загружается:
Основная сущность загружается сразу
Связанные объекты заменяются прокси
Реальный запрос выполняется при первом доступе
Пример:
@Entity
class Order {
@ManyToOne(fetch = FetchType.LAZY)
private Customer customer;
}
Запрос к order.getCustomer():
вызывает дополнительный SQL
только при активном persistence context
Снижение количества запросов
Экономия памяти
Быстрый старт работы с сущностью
LazyInitializationException
Доступ вне транзакции
Закрыт EntityManager
N+1 проблема
Много отдельных запросов
Плохая производительность
Использовать join fetch
Настраивать fetch = EAGER осознанно
Загружать данные в нужных границах транзакции
Lazy-loading — мощный инструмент оптимизации, но требует понимания жизненного цикла транзакций и сущностей. Использовать его нужно осознанно.