2011-12-15 70 views
0

我經常有這樣的使用場景:對hibernate的積極優化getAssocation()。getId()?

實體A連接通過1--1關係到B,

在代碼中,我經常簡單地使用A. *和A.getB()。 getId()我從來不使用B()的其他屬性,因爲B的Id實際上已經存儲在表A中,我不一定要加載表B,但是hibernate總是創建一個JOIN或後面的SELECT當它看到getB()。 這是一個巨大的問題,如果B表很大,或者它有自己的關聯

有沒有一種方法來優化這個特殊用例?

感謝 楊

回答

1

我不認爲這是可能的,因爲Hibernate不知道getId()方法的作用:它可能只是返回ID(這可能是在99%的情況下案件),但它也可以改變它,有一些副作用,在某處記錄某些消息,無論如何。

我並不十分確定,但我想你可能會將表A中的B_ID列映射爲基本列(除了映射爲連接列之外),前提是您將該列標記爲不可插入且非標記-updatable。如果我是正確的,你可以只調用a.getBId()來獲得B的ID不懶加載B.

+0

非常感謝,這樣肯定能行。 我也在沿着線想做原生sql,並且分配結果來構造B實例只是部分的,這樣我們就構造了一個B,但是B只有它的Id被填充,剩下的可以按需加載。我不知道語法應該是什麼。這樣我們不需要改變映射。 可能類似於「從A中選擇A. *,A.B_ID作爲{B.id}」。我對休眠很新 – 2011-12-15 21:14:12