簡體   English   中英

休眠懶加載

[英]hibernate Lazy loading

我的休眠對象A具有對象B,C和D作為屬性:

A.getB().getName();  
A.getC().getTitle();

現在,我想在不獲取LazyInitializationException的情況下加載A的所有屬性。 因此,我需要完全加載A的對象圖。

是否有任何通用方法可以在休眠狀態下檢索對象圖?

View中的模式打開會話有助於避免LazyInitializationException。 同樣在Seam中,它是通過使用擴展的PersistentManager和對話范圍來完成的

另一個解決方案渴望像本示例或KLE答案中那樣獲取。

您可以在.hbm.xml映射文件中使用屬性'lazy =“ false”'進行指定,也可以在條件對象中使用createAlias或createCriteria方法進行指定。

也可以根據特定關聯的條件設置fetchMode

有時您可能希望加載完整的對象圖,而有時則需要更少的數據(並且不想支付與加載所有這些對象相關的性能損失)。 因此,假設您的需求有所不同。

Hibernate延遲加載通常,但是您可以使用以下幾種方法之一加載其他數據(有關詳細信息,請參見Hibernate文檔):

  1. 在會話啟動時(未關閉會話),如果查詢A的字段,則可以按需加載它們。 這非常簡單和靈活,但是如果進行大量數據庫調用,效率可能會很低。
  2. 您可以創建一個HQL請求以指定要加載A,還可以指定一些字段。 為此,請在查詢中使用FETCH。
  3. 您可以使用Criteria API進行相同的操作。 無需指定查詢,而是進行方法調用。

懶惰樣本:

     A a = ...; // load A
     String name = a.getB().getName(); // triggers an implicit query to load B

HQL樣本:

     select a 
     from A a
     left join a.b b
     left join a.c c
     where a.id = :id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM