2016-09-12 67 views
1

我的应用程序使用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<>(); 
} 

我改成了延迟加载这样的:

@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反正加载所有实体,但交易关闭后,迟缓的实体将被丢弃,对不对?但无论如何,它从DB获得所有实体,并且根本没有提高数据库性能。有没有办法强制Hibernate即使在事务过程中也不加载LAZY实体并减少数据库负载?

回答

1

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

你可以enable SQL logging来检查在db中执行哪些查询。