假設您的類B
帶有延遲加載的屬性c
。並且除了以下內容,系統在任何地方都可以使用:覆蓋Hibernate的延遲加載的最佳方法
您有一個類A
,屬性爲B
,屬性爲b
。無論何時加載A
類型的實體,您都希望非懶惰地加載完整的a.b.c
鏈。
有沒有辦法在Hibernate中設置這種類型的邏輯?
編輯:
的屬性也可以用一個formula
這是一個SQL表達式定義。該文檔說:
一個強大的功能是導出 屬性。這些屬性是由 定義爲只讀。 值是在加載時計算的。您 將計算聲明爲SQL 表達式。然後,這將轉換爲 SELECT子句子查詢中加載一個實例的SQL查詢 :
<property name="totalPrice"
formula="(SELECT SUM (li.quantity*p.price) FROM [...])"/>
,如果它是返回一個Hibernate對象的Hibernate查詢這會工作。
編輯2:
其他想法包括聲明一個類B2
這是完全一樣B
除了它的C
屬性不延遲加載。
到目前爲止,選項:
- 每次依靠查詢,通過skaffman的建議。
- 在屬性中使用公式來獲取我想要的字段,但是沒有對象。
- 創建一個
B2
類非懶惰b.c
。 (有點醜)。
對於那些很好的查詢。但是如果我遍歷另一個對象的'.a'屬性,我就不會一次性獲得'a.b.c'。 – z5h 2010-02-14 20:20:32
這的確如此,但是如果你將'B.c'配置爲延遲加載,那麼這就是它的行爲。如果你想覆蓋它,那麼你需要編寫你的查詢來顯式獲取它。 – skaffman 2010-02-14 20:31:54