Hibernate 檢索策略

2021-04-13 12:31:47 字數 1835 閱讀 9238

在預設情況下,當hibernate從資料庫中載入物件時,會同時載入所有關聯的物件. 但實際應用中可能不需要使用其關聯的物件,這樣就可能通過設定hibernate的檢索策略,來優化檢索效能.

hiberante提供了3種檢索策略:1)立即檢索 2)延遲檢索 3)迫切左外連線檢索

下面先從概念上去理解,先在腦袋中有個印象,看到了這樣的用法知道是怎麼回事,它在做什麼.為什麼這樣做.

真正的理解要在以後的專案經驗中慢慢去體會,

下表列出了類級別和關聯級別可選的檢索策略,以及預設的檢索策略.

檢索策略的作用域

可選的檢索策略

預設的檢索策略

執行時受影響的session的檢索方法

類級別立即檢索

延遲檢索

立即檢索

僅影響load()方法

關聯級別

立即檢索

延遲檢索

多對一和一對一關聯為外連線檢索

影響load(),get()和find()方法

迫切左外連線檢索

一對多和多對多關聯為立即檢索

下表列出了 3種檢索策略的執行機制

檢索策略的型別

類級別關聯級別

立即檢索

立即載入檢索方法指定的物件

立即載入與檢索方法指定的物件關聯的物件.可以設定批量檢索數量

延遲檢索

延遲載入檢索方法指定的物件

延遲載入與檢索方法指定的物件關聯的物件.可以設定批量檢索數量

迫切左外連線檢索

不適用通過左外連線載入與檢索方法指定的物件關聯的物件

下表列出了對映檔案中用於設定檢索策略的幾個屬性

屬性可選值

預設值描述

lazy

true, false

false

如果為true,表示使用延遲檢索策略.在和元素中包含此屬性

outer-join

auto. true, false

在和元素中為auto;在元素中為false

如果為true,表示使用迫切左外連線檢索策略.在.和元素中包含此屬性

batch-size

正整數1

設定批量檢索的數量.如果設定此項,合理的取值在3~10之間.僅適用於關聯級別的立即檢索和延遲檢索.在和元素中包含此屬性

下表比較hiberante的三種檢索策略

檢索策略

優點缺點

優先考慮使用的場合

立即檢索

對應用程式完全透明,不管物件處於持久化狀態,還是游離狀態,應用程式都可以方便地從乙個物件導航到與它關聯的物件

(1)select 語句數目多

(2)可能會載入應用程式不需要訪問的物件,白白浪費許多記憶體空間

(1)類級別

(2)應用程式需要立即訪問的物件

(3)使用了第二級快取

延遲檢索

由應用程式決定需要載入那些物件,可以避免執行多餘的select語句,以及避免載入應用程式不需要訪問的物件.因此能提高檢索效能,並且能節省記憶體空間

應用程式如果希望訪問游離狀態的**類例項,必須保證它在持久化狀態已經被初始化

(1)一對多或者多對多關聯

(2)應用程式不需要立即訪問或者根本不會訪問的物件

迫切左外連線檢索

(1)對應用程式完全透明,不管物件處於持久化狀態,還是游離狀態,應用程式都可以方便地從乙個物件導航到與它關聯的物件

(2)使用了外連線,select語句數目少

(1)可能會載入應用程式不需要訪問的物件,白白浪費許多記憶體空間

(2)複雜的資料庫表連線也會影響檢索效能

(1)多對一或者一對一關聯

(2)應用程式需要立即訪問的物件

(3)資料庫系統具有良好的表連線效能

Hibernate檢索策略

預設的檢索策略是立即檢索。在hibernate對映檔案中,通過在上配置 lazy屬性來確定檢索策略。對於session的檢索方式,類級別檢索策略僅適用於load方法 也就說,對於get qurey檢索,持久化物件都會被立即載入而不管lazy是false還是true.一般來說,我們檢索物件就是要訪問它...

hibernate 檢索策略

本文主要是學習hibernate的檢索策略 1 類級別的檢索策略有兩種一種是立即檢索,一種是延遲檢索,僅影響load操作 立即檢索,是類的預設檢索方式,或者設定了lazy false 也是立即檢索方式,即執行load操作之後會立馬返回相應的資料。延遲檢索,當類設定lazy true 時,hibern...

hibernate 檢索策略

不浪費記憶體 提高查詢效率 lazy false 立即檢索 lazy true 延遲檢索 batch size x 批量預抓取數量設定 lazy true false extra true為延遲檢索 false為立即檢索 extra為增強延遲檢索 例如只使用size 方法,則只會傳送一條count的...