Мое приложение использует Hibernate для извлечения данных из базы данных. Сегодня я отлаживал свое приложение и наткнулся на загрузку EAGER.Hibernate загружает все сущности, игнорируя нагрузку LAZY
@Table(name = "orders")
@Entity
public class Order implements Serializable {
@OneToMany(fetch = FetchType.EAGER, mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
private List<DishQuantity> dishes = new ArrayList<>();
}
Я изменил его на нагрузку ленивы, как это:
@OneToMany(fetch = FetchType.LAZY, mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
private List<DishQuantity> dishes = new ArrayList<>();
Когда я делаю вызов базы данных от службы с помощью DAO я получаю результат, как и следовало ожидать, лениво загруженные объекты больше не доступны:
Но когда я иду на запрос и пытается получить объект с помощью Entity менеджера я получаю это:
Похоже, Hibernate все равно загружает все объекты, но после того, как сделка закрыта, LAZY объекты отбрасывают, не так ли? Но в любом случае он получил все сущности из БД и вообще не улучшил производительность БД. Есть ли способ заставить Hibernate не загружать LAZY-объекты даже во время транзакции и уменьшить нагрузку на БД?