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

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

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

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

    常用鏈接

    留言簿(14)

    隨筆檔案(6)

    文章分類(467)

    文章檔案(423)

    相冊

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 825442
    • 排名 - 49

    最新評論

    閱讀排行榜

    評論排行榜

    Hibernate的檢索策略包括類級別檢索策略和關聯級別檢索策略。

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

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

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

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

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

            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端關聯的<class>lazy屬性(配置的可不是<many-to-one>中的lazy哦),它們的組合后的檢索策略如下:

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

            2outer-join=true,無關于lazy,都為迫切左外連接檢索。

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

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

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



    posted on 2007-08-20 20:11 Ke 閱讀(166) 評論(0)  編輯  收藏 所屬分類: hibernate
    主站蜘蛛池模板: 午夜亚洲www湿好大| 亚洲AV成人无码久久WWW| 国产卡一卡二卡三免费入口| 中文字幕亚洲码在线| 亚洲精品和日本精品| 国产一级淫片a免费播放口| 狠狠色香婷婷久久亚洲精品| 免费人成视网站在线观看不卡| 日本免费在线观看| 亚洲色大成网站www永久男同| 亚洲婷婷国产精品电影人久久| 18禁无遮挡无码国产免费网站| 亚洲AV无码成人精品区狼人影院 | 美女羞羞免费视频网站| 亚洲第一极品精品无码久久| 色窝窝免费一区二区三区| 国产美女视频免费观看的网站 | 精品国产免费观看| 性色午夜视频免费男人的天堂| 亚洲AV无码一区二区三区性色 | 夭天干天天做天天免费看| 91精品成人免费国产| 亚洲av永久无码精品网址| 久久亚洲国产成人精品性色| 免费一级大黄特色大片| 黄色片在线免费观看| 国产午夜免费高清久久影院 | 99久久国产热无码精品免费| 好湿好大好紧好爽免费视频| 亚洲精华国产精华精华液 | 亚洲丁香婷婷综合久久| 亚洲黄色一级毛片| 自拍偷自拍亚洲精品被多人伦好爽| 成年免费大片黄在线观看岛国| 免费人成毛片动漫在线播放| 四虎国产精品永免费| 日韩国产欧美亚洲v片| 亚洲色丰满少妇高潮18p| 亚洲成a人片在线观| 久久精品国产亚洲av麻豆小说| 亚洲午夜国产精品无码|