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

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

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

    隨筆-295  評論-26  文章-1  trackbacks-0

    hibernate數據加載get/load的區別

    關鍵字: ? hibernate????

    Session.load/get方法均可以根據指定的實體類和id從數據庫讀取記錄,并返回與之對應的實體對象。其區別在于:

    1. 如果未能發現符合條件的記錄,get方法返回null,而load方法會拋出一個ObjectNotFoundException。
    2. Load方法可返回實體的代理類實例,而get方法永遠直接返回實體類。
    3. load方法可以充分利用內部緩存和二級緩存中的現有數據,而get方法則僅僅在內部緩存中進行數據查找,如沒有發現對應數據,將越過二級緩存,直接調用SQL完成數據讀取。

    Session在加載實體對象時,將經過的過程:

    1. 首先,Hibernate中維持了兩級緩存。第一級緩存由Session實例維護,其中保持了Session當前所有關聯實體的數據,也稱為內部緩存。而第二級緩存則存在于SessionFactory層次,由當前所有由本SessionFactory構造的Session實例共享。出于性能考慮,避免無謂的數據庫訪問,Session在調用數據庫查詢功能之前,會先在緩存中進行查詢。首先在第一級緩存中,通過實體類型和id進行查找,如果第一級緩存查找命中,且數據狀態合法,則直接返回。
    2. 之后,Session會在當前“NonExists”記錄中進行查找,如果“NonExists”記錄中存在同樣的查詢條件,則返回null。“NonExists”記錄了當前Session實例在之前所有查詢操作中,未能查詢到有效數據的查詢條件(相當于一個查詢黑名單列表)。如此一來,如果Session中一個無效的查詢條件重復出現,即可迅速作出判斷,從而獲得最佳的性能表現。
    3. 對于load方法而言,如果內部緩存中未發現有效數據,則查詢第二級緩存,如果第二級緩存命中,則返回。
    4. 如在緩存中未發現有效數據,則發起數據庫查詢操作(Select SQL),如經過查詢未發現對應記錄,則將此次查詢的信息在“NonExists”中加以記錄,并返回null。
    5. 根據映射配置和Select SQL得到的ResultSet,創建對應的數據對象。
    6. 將其數據對象納入當前Session實體管理容器(一級緩存)。
    7. 執行Interceptor.onLoad方法(如果有對應的Interceptor)。
    8. 將數據對象納入二級緩存。
    9. 如果數據對象實現了LifeCycle接口,則調用數據對象的onLoad方法。
    10. 返回數據對象。


    大盤預測 國富論
    posted on 2007-08-24 08:42 華夢行 閱讀(90) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 污视频网站免费在线观看| 亚洲午夜精品在线| 一级做a爱过程免费视频高清 | 精品久久久久久亚洲中文字幕| 99久久99这里只有免费费精品| 亚洲精品国产免费| 成年人网站免费视频| 亚洲六月丁香六月婷婷色伊人 | 成人片黄网站色大片免费| 亚洲三级在线视频| 无码人妻一区二区三区免费手机| 亚洲中字慕日产2020| 好男人视频社区精品免费| 亚洲AV无码成人精品区日韩| 国产成人综合久久精品免费| 亚欧乱色国产精品免费视频| 国产亚洲精品a在线观看| 国内精品久久久久影院免费| 亚洲经典在线中文字幕| 大地资源免费更新在线播放| 日本亚洲中午字幕乱码| 亚洲婷婷国产精品电影人久久| 最近免费中文字幕MV在线视频3| 亚洲AV中文无码字幕色三| 足恋玩丝袜脚视频免费网站| 亚洲AV成人影视在线观看| 宅男666在线永久免费观看| 在线播放国产不卡免费视频| 精品国产综合成人亚洲区| 四虎1515hh永久久免费| 337p日本欧洲亚洲大胆人人 | 亚洲gv白嫩小受在线观看| 久久笫一福利免费导航| 国产精品亚洲va在线观看| 亚洲精品乱码久久久久66| 一二三四视频在线观看中文版免费| 美女扒开屁股让男人桶爽免费| 亚洲第一极品精品无码久久| A在线观看免费网站大全| 七次郎成人免费线路视频| 亚洲精品视频专区|