2016-09-12 99 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中執行哪些查詢。