Hibernate數據加載方式淺析
Hibernate數據加載支持以下幾種方式:
◆即時加載(Immediate Loading)
◆當實體加載完成后,立即加載其關聯數據
◆延遲加載(Lazy Loading)
◆實體加載時,其關聯數據并非馬上獲取,而是當關聯數據第一次被訪問時再進行讀取.
◆預先加載(Eager Loading),預先加載時,實體及其關聯對象同時讀取,這與即時加載類似,不過實體及其關聯數據是通過一條SQL語句(基于外連接[outer join])同時讀取.
◆批量加載(Batch Loading),對于即時加載與延遲加載,可以采用批量加載方式進行性能上的優化
即時加載(Immediate Loading)
配置如下:
"address" - table="t_address"
- inverse="true"
- cascade="none"
- sort="unsorted"
- lazy="false">
"user_id"> class="com.hpjianhua.hibernate.Address"/>
即時Hibernate數據加載的基本原理:當宿主實體(關聯主體)加載時,Hibernate會馬上自動讀取其關聯的數據并完成關聯屬性的填充.
延遲加載(Lazy Loading)
配置如下:
"address" - table="t_address"
- inverse="true"
- cascade="none"
- sort="unsorted"
- lazy="true">
"user_id"> class="com.hpjianhua.hibernate.Address"/>
預先加載(Eager Loading)
預先Hibernate數據加載即通過outer-join完成關聯數據的加載,這樣,通過一條SQL語句即可完成實體及其關聯數據的讀取操作,相對即時讀取的兩條甚至若干條SQL而言,無疑這種機制在性能上能帶來更多的提升.
批量加載(Batch Loading)
批量加載,簡而言之,就是通過批量Hibernate數據加載提交多個 限定條件,一次完成多個數據的讀取.如對于以下形式的SQL:
Select from User where id=1;
Select from User where id=3;
我們可以整合成一條SQL語句完成同樣的功能:
Select from User where id=1 or id=3;
這就是所謂的批量Hibernate數據加載機制,如果使用了批量加載機制,Hibernate在進行數據查詢操作前,會自動在當前的Session中尋找是否還有其他同類型的待加載的數據,如果有,則將其查詢條件合并到當前的select語句中一并提交,這樣,通過一次數據庫操作即完成了多個讀取任務.
在實體配置的class節點中,我們可以通過batch-size參數打開批量加載機制,并限定每次批量加載的數量:
一般來說,batch-size應該設定為一個合理的小型數值(<10).
【編輯推薦】