1
是否有可能強制Hibernate使用批量抓取進行預加載的JPA實現?渴望加載usig批處理獲取
您可能想知道爲什麼我想要做這麼奇怪的事情,所以讓我解釋一下。
我們有兩個實體A
和B
。從A
到B
有多對一的關係。
我想加載A
實體進行搜索,我希望在從存儲庫返回之前將它們完全加載。
但由於有很多A
和很少B
的所有(相關)B
將在二級緩存中。因此,我希望避免每次從數據庫中獲取所有B
。
是否有可能強制Hibernate使用批量抓取進行預加載的JPA實現?渴望加載usig批處理獲取
您可能想知道爲什麼我想要做這麼奇怪的事情,所以讓我解釋一下。
我們有兩個實體A
和B
。從A
到B
有多對一的關係。
我想加載A
實體進行搜索,我希望在從存儲庫返回之前將它們完全加載。
但由於有很多A
和很少B
的所有(相關)B
將在二級緩存中。因此,我希望避免每次從數據庫中獲取所有B
。
據我瞭解你的問題,一個解決辦法是在一個NamedQuery使用NamedQuery與FETCH
指令:
SELECT DISTINCT B LEFT JOIN FETCH B.a A//will return fully loaded B instances
如果要指定批量大小,你可以使用在Hibernate中@BatchSize
(不是JPA)。以this link爲例。
但爲了加載B實例,它將使用連接,從而繞過第二級緩存,對吧? –
恕我直言,是的,因爲它是任何NamedQuery的情況下(如果查詢結果沒有緩存!)。但是,您可以使用'@ BatchSize'而不使用NamedQueries。 –