Sobes.tech
Back to questions
Junior — Middle
62

Использовал ли ты механизм ленивой загрузки данных в Hibernate через FetchType Lazy?

Companies where asked
Prime

Answer from AI

sobes.tech AI

Да, я использовал ленивую загрузку (FetchType.LAZY) в Hibernate. Это означает, что связанные сущности не загружаются сразу при выборке основной сущности, а только при первом обращении к ним.

Например, если у вас есть сущность Order с коллекцией items, помеченной как @OneToMany(fetch = FetchType.LAZY), то при загрузке заказа из базы коллекция items не будет загружена сразу. Она загрузится только когда вы вызовете order.getItems().

Это помогает оптимизировать производительность, уменьшая количество загружаемых данных и количество SQL-запросов, особенно если связанные данные не всегда нужны.

Однако нужно быть осторожным с сессией Hibernate — если сессия закрыта, а вы пытаетесь получить лениво загруженные данные, возникнет исключение LazyInitializationException. Чтобы этого избежать, можно использовать:

  • Открытую сессию на время работы с объектами (Open Session in View)
  • Явное инициализирование через Hibernate.initialize()
  • Использование JOIN FETCH в запросах для жадной загрузки, когда нужно

Пример:

@Entity
public class Order {
    @OneToMany(fetch = FetchType.LAZY)
    private Set<Item> items;
    // геттеры и сеттеры
}

Order order = session.get(Order.class, id);
// items еще не загружены
Set<Item> items = order.getItems(); // здесь происходит загрузка из БД