溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Hibernate檢索策略是什么

發(fā)布時間:2021-12-04 16:25:52 來源:億速云 閱讀:165 作者:iii 欄目:編程語言

本篇內(nèi)容介紹了“Hibernate檢索策略是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

Hibernate檢索策略包括類級別檢索策略和關(guān)聯(lián)級別檢索策略。

類級別檢索策略有立即檢索和延遲檢索,默認(rèn)的檢索策略是立即檢索。在Hibernate映射文件中,通過在<class>上配置lazy屬性來確定檢索策略。對于Session的檢索方式,類級別檢索策略僅適用于load方法;也就說,對于get、qurey檢索,持久化對象都會被立即加載而不管lazy是false還是true.一般來說,我們檢索對象就是要訪問它,因此立即檢索是通常的選擇。由于load方法在檢索不到對象時會拋出異常(立即檢索的情況下.,因此我個人并不建議使用load檢索;而由于<class>中的lazy屬性還影響到多對一及一對一的檢索策略,因此使用load方法就更沒必要了。

關(guān)聯(lián)級別檢索策略有立即檢索、延遲檢索和迫切左外連接檢索。對于關(guān)聯(lián)級別檢索,又可分為一對多和多對多、多對一和一對一兩種情況討論。

一對多和多對多關(guān)聯(lián)關(guān)系一般使用<set>配置。<set>有l(wèi)azy和outer-join屬性,它們的不同取值絕對了檢索策略。

1.立即檢索:這是一對多默認(rèn)的檢索策略,此時lazy=false,outer-join=false.盡管這是默認(rèn)的檢索策略,但如果關(guān)聯(lián)的集合是無用的,那么就不要使用這種檢索方式。

2.延遲檢索:此時lazy=true,outer-join=false(outer-join=true是無意義的.,這是優(yōu)先考慮的檢索方式。

3.迫切左外連接檢索:此時 lazy=false,outer-join=true,這種檢索策略只適用于依靠id檢索方式(load、get.,而不適用于query的集合檢索(它會采用立即檢索策略.。相比于立即檢索,這種檢索策略減少了一條sql語句,但在Hibernate中,只能有一個<set>配置成 outer-join=true.

多對一和一對一檢索策略一般使用<many-to-one>、<one-to-one>配置。<many-to-one>中需要配置的屬性是 outer-join,同時還需要配置one端關(guān)聯(lián)的<class>的lazy屬性(配置的可不是<many-to-one>中的lazy哦.,它們的組合后的檢索策略如下:
1.outer-join=auto:這是默認(rèn)值,如果lazy=true為延遲檢索,如果lazy=false為迫切左外連接檢索。
2.outer-join=true:無關(guān)于lazy,都為迫切左外連接檢索。
3.outer-join=false:如果lazy=true為延遲檢索,否則為立即檢索。

可以看到,在默認(rèn)的情況下(outer-join=auto,lazy=false.,對關(guān)聯(lián)的one端對象Hibernate采用的迫切左外連接檢索。依我看,很多情況下,我們并不需要加載one端關(guān)聯(lián)的對象(很可能我們需要的僅僅是關(guān)聯(lián)對象的id.;另外,如果關(guān)聯(lián)對象也采用了迫切左外連接檢索,就會出現(xiàn)select語句中有多個外連接表,如果個數(shù)多的話會影響檢索性能,這也是為什么Hibernate通過hibernate.max_fetch_depth屬性來控制外連接的深度。對于迫切左外連接檢索,query的集合檢索并不適用,它會采用立即檢索策略。

對于Hibernate檢索策略,需要根據(jù)實際情況進(jìn)行選擇。對于立即檢索和延遲檢索,它們的優(yōu)點在于select語句簡單(每張表一條語句),查詢速度快,缺點在于關(guān)聯(lián)表時需要多條select語句,增加了訪問數(shù)據(jù)庫的頻率。因此在選擇即檢索和延遲檢索時,可以考慮使用批量檢索策略來減少select語句的數(shù)量(配置batch-size屬性)。對于切左外連接檢索,優(yōu)點在于select較少,但缺點是select語句的復(fù)雜度提高,多表之間的關(guān)聯(lián)會是很耗時的操作。另外,配置文件是死的,但程序是活的,可以根據(jù)需要在程序里顯示的指定檢索策略(可能經(jīng)常需要在程序中顯示指定迫切左外連接檢索)。為了清楚檢索策略的配置效果如何,可以配置show_sql屬性查看程序運(yùn)行時Hibernate執(zhí)行的sql語句。

“Hibernate檢索策略是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI