您好,登錄后才能下訂單哦!
小編給大家分享一下Hibernate使用批量抓取技巧有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Hibernate批量抓取是延遲查詢抓取的優(yōu)化方案,你可以在兩種Hibernate批量抓取方案之間進行選擇:在類級別和集合級別。
類/實體級別的批量抓取很容易理解。假設你在運行時將需要面對下面的問題:你在一個Session中載入了25個Cat實例,每個Cat實例都擁有一個引用成員owner, 其指向Person,而Person類是代理,同時lazy="true"。
如果你必須遍歷整個cats集合,對每個元素調(diào)用getOwner()方法,Hibernate將會默認的執(zhí)行25次SELECT查詢,得到其owner的代理對象。這時,你可以通過在映射文件的Person屬性,顯式聲明batch-size,改變其行為:
<class name="Person" batch-size="10">...</class>
隨之,Hibernate將只需要執(zhí)行三次查詢,分別為10、10、 5。
你也可以在集合級別定義批量抓取。例如,如果每個Person都擁有一個延遲載入的Cats集合,現(xiàn)在,Sesssion中載入了10個person對象,遍歷person集合將會引起10次SELECT查詢,每次查詢都會調(diào)用getCats()方法。如果你在Person的映射定義部分,允許對cats批量抓取, 那么,Hibernate將可以預先抓取整個集合。
請看例子:
<class name="Person"> <set name="cats" batch-size="3"> ... </set> </class>
如果整個的batch-size是3(筆誤?),那么Hibernate將會分四次執(zhí)行SELECT查詢,按照3、3、3、1的大小分別載入數(shù)據(jù)。這里的每次載入的數(shù)據(jù)量還具體依賴于當前Session中未實例化集合的個數(shù)。
如果你的模型中有嵌套的樹狀結構,例如典型的帳單-原料結構(bill-of-materials pattern),集合的Hibernate批量抓取是非常有用的。(盡管在更多情況下對樹進行讀取時,嵌套集合(nested set)或原料路徑(materialized path)(××) 是更好的解決方法。)
以上是“Hibernate使用批量抓取技巧有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。