Hibernate加载忽略LAZY加载的所有实体

时间:2016-09-12 09:38:00

标签: hibernate jpa transactions lazy-loading entitymanager

我的应用程序使用Hibernate从数据库中检索数据。今天我调试了我的应用程序并偶然发现了EAGER负载。

@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<>();
}

我将它更改为LAZY加载:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<DishQuantity> dishes = new ArrayList<>();

当我使用DAO从服务调用数据库时,我按预期收到结果,延迟加载的实体不再可用:

lazy loading from service

但是,当我开始查询并尝试使用实体管理器获取实体时,我会收到:

enter image description here

看起来Hibernate无论如何加载所有实体但是在事务关闭后,LAZY实体被丢弃了,对吧?但无论如何,它从数据库获得了所有实体,并且根本没有提高数据库性能。是否有办法强制Hibernate即使在事务处理期间也不加载LAZY实体并减少数据库负载?

1 个答案:

答案 0 :(得分:1)

在两种情况下都会延迟加载它们,但是您在调试器中触发初始化(第一次关闭封闭的Session后,第二次在活动Session期间)。

您可以enable SQL logging检查数据库中执行的查询。