Можете объяснить механизм поведения стратегии загрузки ассоциаций FetchType.LAZY в ORM-системах?
Ответ от нейросети
sobes.tech AI
В ORM-системах, таких как Hibernate, стратегия загрузки FetchType.LAZY означает, что связанные сущности (ассоциации) не загружаются из базы данных сразу вместе с основной сущностью. Вместо этого они загружаются только при первом обращении к ним в коде.
Например, если у вас есть сущность Order с коллекцией items, помеченной как LAZY, то при загрузке заказа из базы коллекция items не будет сразу загружена. При первом вызове order.getItems() ORM выполнит отдельный запрос к базе, чтобы получить эти данные.
Это позволяет экономить ресурсы и уменьшать время загрузки, особенно если связанные данные не всегда нужны. Однако нужно быть осторожным с сессией/транзакцией: если сессия закрыта, а вы пытаетесь получить LAZY-загруженную коллекцию, возникнет ошибка LazyInitializationException.
Пример:
@Entity
public class Order {
@OneToMany(fetch = FetchType.LAZY)
private List<Item> items;
// геттеры и сеттеры
}
// При загрузке Order items не загружаются сразу
Order order = entityManager.find(Order.class, id);
// Здесь items еще не загружены
List<Item> items = order.getItems(); // Здесь происходит отдельный запрос к БД