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

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

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

    tao的學習樂園
    隨筆 - 6  文章 - 4  trackbacks - 0
    <2009年7月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

        hibernate中get方法和load方法的根本區別在于:如果你使用load方法,hibernate認為該id對應的對象(數據庫記錄)在數據庫中是一定存在的,所以它可以放心的使用,它可以放心的使用代理來延遲加載該對象。在用到對象中的其他屬性數據時才查詢數據庫,但是萬一數據庫中不存在該記錄,那沒辦法,只能拋異常,所說的load方法拋異常是指在使用該對象的數據時,數據庫中不存在該數據時拋異常,而不是在創建這個對象時。由于session中的緩存對于hibernate來說是個相當廉價的資源,所以在load時會先查一下session緩存看看該id對應的對象是否存在,不存在則創建代理。所以如果你知道該id在數據庫中一定有對應記錄存在就可以使用load方法來實現延遲加載。
        對于get方法,hibernate會確認一下該id對應的數據是否存在,首先在session緩存中查找,然后在二級緩存中查找,還沒有就查數據庫,數據庫中沒有就返回null。雖然好多書中都這么說:“get()永遠只返回實體類”,但實際上這是不正確的,get方法如果在session緩存中找到了該id對應的對象,如果剛好該對象前面是被代理過的,如被load方法使用過,或者被其他關聯對象延遲加載過,那么返回的還是原先的代理對象,而不是實體類對象,如果該代理對象還沒有加載實體數據(就是id以外的其他屬性數據),那么它會查詢二級緩存或者數據庫來加載數據,但是返回的還是代理對象,只不過已經加載了實體數據。 
        關于二者查詢數據的順序可以由前面內容總結如下:get方法首先查詢session緩存,沒有的話查詢二級緩存,最后查詢數據庫;反而load方法創建時首先查詢session緩存,沒有就創建代理,實際使用數據時才查詢二級緩存和數據庫

        總之對于get和load的根本區別,一句話,hibernate對于load方法認為該數據在數據庫中一定存在,可以放心的使用代理來延遲加載,如果在使用過程中發現了問題,只能拋異常;而對于get方法,hibernate一定要獲取到真實的數據,否則返回null。   
    posted on 2009-07-07 13:46 teok 閱讀(302) 評論(1)  編輯  收藏
    trust what we trust... 主站蜘蛛池模板: 成人亚洲性情网站WWW在线观看| 美女被爆羞羞网站在免费观看| 高清在线亚洲精品国产二区| 成年人免费的视频| 成人毛片100免费观看| 春暖花开亚洲性无区一区二区| 久久亚洲精品成人AV| 国产亚洲午夜高清国产拍精品 | 亚洲精品97久久中文字幕无码| 4399好看日本在线电影免费| APP在线免费观看视频| 国产成人无码免费网站| 亚洲av无码一区二区三区人妖| 亚洲另类古典武侠| 亚洲色图综合网站| 日韩精品一区二区亚洲AV观看| 亚洲人成网站在线观看播放| 可以免费观看的一级毛片| 免费激情视频网站| 国产三级在线观看免费| 999国内精品永久免费观看| 久久一本岛在免费线观看2020| 国产乱妇高清无乱码免费| 男女污污污超污视频免费在线看| 亚洲 日韩经典 中文字幕| 亚洲AV无码国产精品色| 亚洲国产亚洲综合在线尤物| 亚洲福利电影在线观看| 亚洲电影免费在线观看| 久久精品亚洲一区二区| 亚洲a在线视频视频| 亚洲国产老鸭窝一区二区三区| 亚洲成A人片在线观看无码不卡| 亚洲欧洲精品无码AV| 激情97综合亚洲色婷婷五| 中文字幕精品亚洲无线码一区| 亚洲性在线看高清h片| 亚洲一区二区三区乱码A| 亚洲伊人久久综合中文成人网| 亚洲成片观看四虎永久| 久久精品国产精品亚洲|