我的应用程序使用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从服务调用数据库时,我按预期收到结果,延迟加载的实体不再可用:
但是,当我开始查询并尝试使用实体管理器获取实体时,我会收到:
看起来Hibernate无论如何加载所有实体但是在事务关闭后,LAZY实体被丢弃了,对吧?但无论如何,它从数据库获得了所有实体,并且根本没有提高数据库性能。是否有办法强制Hibernate即使在事务处理期间也不加载LAZY实体并减少数据库负载?
答案 0 :(得分:1)
在两种情况下都会延迟加载它们,但是您在调试器中触发初始化(第一次关闭封闭的Session
后,第二次在活动Session
期间)。
您可以enable SQL logging检查数据库中执行的查询。