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

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

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

    邊城愚人

    如果我不在邊城,我一定是在前往邊城的路上。

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      31 隨筆 :: 0 文章 :: 96 評論 :: 0 Trackbacks

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

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

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

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

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

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

    ??? ??? 3)迫切左外連接檢索:此時 lazy=falseouter-join=true,這種檢索策略只適用于依靠id檢索方式(loadget),而不適用于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哦),它們的組合后的檢索策略如下:

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

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

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

    ??? ??? 可以看到,在默認的情況下(outer-join=autolazy=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的集合檢索并不適用,它會采用立即檢索策略。

    ??? ??? 對于檢索策略,需要根據(jù)實際情況進行選擇。對于立即檢索和延遲檢索,它們的優(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屬性查看程序運行時Hibernate執(zhí)行的sql語句。

    ??? ???

    ??? ??? 注:本文是《精通Hibernate》(孫衛(wèi)琴著)的溫習(xí)筆記,關(guān)于Hibernate的檢索策略的詳細內(nèi)容,請參考原書。

    posted on 2007-08-11 13:33 kafka0102 閱讀(1042) 評論(0)  編輯  收藏 所屬分類: Framework
    主站蜘蛛池模板: 性感美女视频免费网站午夜| 1000部国产成人免费视频| 成年女人免费视频播放体验区 | 国产又黄又爽胸又大免费视频| 无码国模国产在线观看免费| 亚洲欧美综合精品成人导航| 在线视频免费国产成人| 香港经典a毛片免费观看看| vvvv99日韩精品亚洲| a级毛片免费观看网站| 亚洲精品无码不卡在线播HE| 久久九九全国免费| 久久亚洲精品国产精品| 美女视频黄的全免费视频| 亚洲第一男人天堂| 免费中文字幕在线| 免费看无码特级毛片| 久久国产亚洲高清观看| 成全影视免费观看大全二| 在线亚洲v日韩v| 亚洲女同成人AⅤ人片在线观看| 九九久久国产精品免费热6 | 久久亚洲精品无码VA大香大香| 国产成人免费午夜在线观看 | 亚洲av乱码一区二区三区| 日本无卡码免费一区二区三区| 又黄又大的激情视频在线观看免费视频社区在线 | 午夜男人一级毛片免费| 丰满妇女做a级毛片免费观看| 亚洲国产精华液网站w| 曰曰鲁夜夜免费播放视频| 欧美色欧美亚洲另类二区| 狠狠色婷婷狠狠狠亚洲综合| 久久中文字幕免费视频| 亚洲综合国产成人丁香五月激情| 亚洲国产aⅴ综合网| 日韩精品无码免费一区二区三区 | 天堂亚洲免费视频| 无码国产精品一区二区免费16| 99热亚洲色精品国产88| 亚洲精品国产V片在线观看|