Sobes.tech
Назад к вопросам
Junior — Middle
65

Можете объяснить механизм поведения стратегии загрузки ассоциаций 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(); // Здесь происходит отдельный запрос к БД