<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 4  文章 - 10  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(1)

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

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

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

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

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

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

            2)延遲檢索:此時(shí)lazy=trueouter-join=falseouter-join=true是無(wú)意義的),這是優(yōu)先考慮的檢索方式。

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

            多對(duì)一和一對(duì)一檢索策略一般使用<many-to-one><one-to-one>配置。<many-to-one>中需要配置的屬性是 outer-join,同時(shí)還需要配置one端關(guān)聯(lián)的<class>lazy屬性(配置的可不是<many-to-one>中的lazy哦),它們的組合后的檢索策略如下:

            1outer-join=auto:這是默認(rèn)值,如果lazy=true為延遲檢索,如果lazy=false為迫切左外連接檢索。

            2outer-join=true,無(wú)關(guān)于lazy,都為迫切左外連接檢索。

            3outer-join=false,如果lazy=true為延遲檢索,否則為立即檢索。

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

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

           

    posted on 2007-08-13 10:22 冬天出走的豬 閱讀(174) 評(píng)論(0)  編輯  收藏 所屬分類: hibernate
    主站蜘蛛池模板: 亚洲精品国产成人专区| 日本高清不卡中文字幕免费| 精品无码国产污污污免费| 国产成人亚洲综合无| 亚洲狠狠婷婷综合久久久久| 欧美大尺寸SUV免费| 国产免费A∨在线播放| 久久久久亚洲AV无码网站| 国产成人免费片在线视频观看| 国产资源免费观看| a一级爱做片免费| 波多野结衣亚洲一级| 国产AV无码专区亚洲AV手机麻豆| 在线观看日本亚洲一区| 国产精品亚洲玖玖玖在线观看| 亚洲爆乳无码专区www| 亚洲午夜激情视频| 一级女人18毛片免费| 一级特黄a大片免费| 亚洲乱码一二三四区乱码| 亚洲中文字幕无码一区二区三区| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲精品国精品久久99热| 一级毛片全部免费播放| 香蕉视频免费在线播放| 亚洲国产品综合人成综合网站| 最好看最新的中文字幕免费| 猫咪免费人成网站在线观看入口| 国产精品免费视频一区| 嫩草在线视频www免费观看| 精品久久久久久亚洲中文字幕| 亚洲第一区精品日韩在线播放| 四虎精品成人免费视频| 亚洲性无码av在线| 亚洲成AV人片一区二区| 国产成人亚洲综合| 免费国产成人高清在线观看麻豆 | 免费国产在线视频| 亚洲AV无码一区二区三区网址 | 免费中文字幕在线观看| 91在线品视觉盛宴免费|