我經常有這樣的使用場景:對hibernate的積極優化getAssocation()。getId()?
實體A連接通過1--1關係到B,
在代碼中,我經常簡單地使用A. *和A.getB()。 getId()我從來不使用B()的其他屬性,因爲B的Id實際上已經存儲在表A中,我不一定要加載表B,但是hibernate總是創建一個JOIN或後面的SELECT當它看到getB()。 這是一個巨大的問題,如果B表很大,或者它有自己的關聯
有沒有一種方法來優化這個特殊用例?
感謝 楊
我經常有這樣的使用場景:對hibernate的積極優化getAssocation()。getId()?
實體A連接通過1--1關係到B,
在代碼中,我經常簡單地使用A. *和A.getB()。 getId()我從來不使用B()的其他屬性,因爲B的Id實際上已經存儲在表A中,我不一定要加載表B,但是hibernate總是創建一個JOIN或後面的SELECT當它看到getB()。 這是一個巨大的問題,如果B表很大,或者它有自己的關聯
有沒有一種方法來優化這個特殊用例?
感謝 楊
Hibernate one-to-one: getId() without fetching entire object
http://javaprogrammingtips4u.blogspot.com/2010/04/field-versus-property-access-in.html
基本上你需要穿上的getId註釋()而不是私人整數ID。
在XML映射文件而言,你只需要把接入=「屬性」,在你的類的標籤
我不認爲這是可能的,因爲Hibernate不知道getId()方法的作用:它可能只是返回ID(這可能是在99%的情況下案件),但它也可以改變它,有一些副作用,在某處記錄某些消息,無論如何。
我並不十分確定,但我想你可能會將表A中的B_ID列映射爲基本列(除了映射爲連接列之外),前提是您將該列標記爲不可插入且非標記-updatable。如果我是正確的,你可以只調用a.getBId()來獲得B的ID不懶加載B.
非常感謝,這樣肯定能行。 我也在沿着線想做原生sql,並且分配結果來構造B實例只是部分的,這樣我們就構造了一個B,但是B只有它的Id被填充,剩下的可以按需加載。我不知道語法應該是什麼。這樣我們不需要改變映射。 可能類似於「從A中選擇A. *,A.B_ID作爲{B.id}」。我對休眠很新 – 2011-12-15 21:14:12