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

Могли бы вы объяснить концепцию Eager загрузки в Hibernate и как она отличается от Lazy?

Ответ от нейросети

sobes.tech AI

В Hibernate концепция Eager (жадной) загрузки означает, что связанные объекты загружаются сразу вместе с основным объектом, обычно через JOIN в SQL. Это удобно, когда связанные данные точно нужны, чтобы избежать дополнительных запросов.

Lazy (ленивая) загрузка откладывает загрузку связанных объектов до момента их непосредственного обращения. При этом Hibernate выполняет отдельный запрос к базе только при необходимости.

Пример:

@Entity
public class Order {
    @OneToMany(fetch = FetchType.LAZY) // или FetchType.EAGER
    private Set<Item> items;
}
  • При FetchType.EAGER при загрузке заказа сразу подтянутся все связанные позиции.
  • При FetchType.LAZY позиции загрузятся только при вызове order.getItems().

Eager загрузка может повысить производительность, если данные точно нужны, но увеличивает нагрузку при избыточной загрузке. Lazy загрузка экономит ресурсы, но может привести к проблеме "N+1 запросов" при неправильном использовании.