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

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

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

    hibernate持久層操作

    Session.get/load的區(qū)別:
          1.如果未能發(fā)現(xiàn)符合條件的記錄,get方法返回null,而load方法會拋出一個ObejctNotFoundException。
          2.Load方法可返回實體的代理類類型,而get方法永遠(yuǎn)直接返回實體類。
          3.Load方法可以充分利用內(nèi)部緩存和二級緩存中現(xiàn)有數(shù)據(jù),而get方法則僅僅在內(nèi)部緩存中進(jìn)行數(shù)據(jù)查找,如沒有發(fā)現(xiàn)對應(yīng)數(shù)據(jù),將越過二級緩存,直接調(diào)用SQL完成數(shù)據(jù)讀取。

     

     



          Session.find/iterate的區(qū)別:
          find方法將執(zhí)行Select SQL從數(shù)據(jù)庫中獲得所有符合條件的記錄并構(gòu)造相應(yīng)的實體對象,實體對象構(gòu)建完畢之后,就將其納入緩存。它對緩存只寫不讀,因此無法利用緩存。
          iterate方法首先執(zhí)行一條Select SQL以獲得所有符合查詢條件的數(shù)據(jù)id,隨即,iterate方法首先在本地緩存中根據(jù)id查找對應(yīng)的實體對象是否存在,如果緩存中已經(jīng)存在對應(yīng)的數(shù)據(jù),則直接以此數(shù)據(jù)對象作為查詢結(jié)果,如果沒有找到,再執(zhí)行相應(yīng)的Select語句獲得對應(yīng)的庫表記錄(iterate方法如果執(zhí)行了數(shù)據(jù)庫讀取操作并構(gòu)建了完整的數(shù)據(jù)對象,也會將其查詢結(jié)果納入緩存)。

     

     



          Query Cache產(chǎn)生作用的情況:
          1.完全相同的Select SQL重復(fù)執(zhí)行。
          2.在兩次查詢之間,此Select SQL對應(yīng)的庫表沒有發(fā)生過改變。

     

     



          Session.save方法的執(zhí)行步驟:
          1.在Session內(nèi)部緩存中尋找待保存對象。內(nèi)部緩存命中,則認(rèn)為此數(shù)據(jù)已經(jīng)保存(執(zhí)行過insert操作),實體對象已經(jīng)處于Persistent狀態(tài),直接返回。
          2.如果實體類實現(xiàn)了lifecycle接口,則調(diào)用待保存對象的onSave方法。
          3.如果實體類實現(xiàn)了validatable接口,則調(diào)用其validate()方法。
          4.調(diào)用對應(yīng)攔截器的Interceptor.onSave方法(如果有的話)。
          5.構(gòu)造Insert SQL,并加以執(zhí)行。
          6.記錄插入成功,user.id屬性被設(shè)定為insert操作返回的新記錄id值。
          7.將user對象放入內(nèi)部緩存。
          8.最后,如果存在級聯(lián)關(guān)系,對級聯(lián)關(guān)系進(jìn)行遞歸處理。

     

     



          Session.update方法的執(zhí)行步驟:
          1.根據(jù)待更新實體對象的Key,在當(dāng)前session的內(nèi)部緩存中進(jìn)行查找,如果發(fā)現(xiàn),則認(rèn)為當(dāng)前實體對象已經(jīng)處于Persistent狀態(tài),返回。
          2.初始化實體對象的狀態(tài)信息(作為之后臟數(shù)據(jù)檢查的依據(jù)),并將其納入內(nèi)部緩存。注意這里Session.update方法本身并沒有發(fā)送Update SQL完成數(shù)據(jù)更新操作,Update SQL將在之后的Session.flush方法中執(zhí)行(Transaction.commit在真正提交數(shù)據(jù)庫事務(wù)之前會調(diào)用Session.flush)。

     

     


     

          Session.saveOrUpdate方法的執(zhí)行步驟:
          1.首先在Session內(nèi)部緩存中進(jìn)行查找,如果發(fā)現(xiàn)則直接返回。
          2.執(zhí)行實體類對應(yīng)的Interceptor.isUnsaved方法(如果有的話),判斷對象是否為未保存狀態(tài)。
          3.根據(jù)unsaved-value判斷對象是否處于未保存狀態(tài)。
          4.如果對象未保存(Transient狀態(tài)),則調(diào)用save方法保存對象。
          5.如果對象為已保存(Detached狀態(tài)),調(diào)用update方法將對象與Session重新關(guān)聯(lián)。

    posted on 2009-03-26 00:09 MichaelLee 閱讀(171) 評論(0)  編輯  收藏 所屬分類: Hibernate

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計

    公告

    ====Michael Lee====
    =Java Sofware Engineer=
    =Work @ Beijing=
    ---再煩,也別忘微笑;再急,也要注意語氣;再苦,也別忘堅持;再累,也要愛自己!---
    ---低調(diào)做人,你會一次比一次穩(wěn)健;高調(diào)做事,你會一次比一次優(yōu)秀---
    ---成功的時候不要忘記過去;失敗的時候不要忘記還有未來---

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费看美女让人桶尿口| 今天免费中文字幕视频| 精品熟女少妇aⅴ免费久久| 最近中文字幕电影大全免费版| 亚洲人成77777在线播放网站| 一区二区在线视频免费观看| 九月婷婷亚洲综合在线| 日本免费精品一区二区三区| 亚洲欧洲久久av| a级毛片高清免费视频| 亚洲乱色熟女一区二区三区丝袜| a毛片免费观看完整| 亚洲国产成人久久精品影视| **一级毛片免费完整视| 亚洲国产精品日韩在线观看| 99国产精品永久免费视频 | 亚洲色中文字幕无码AV| 精选影视免费在线 | 久久噜噜噜久久亚洲va久| 精品国产污污免费网站aⅴ| 亚洲理论在线观看| 暖暖日本免费在线视频| 日本精品久久久久久久久免费| 国产亚洲精久久久久久无码AV| 免费国产99久久久香蕉| 亚洲va成无码人在线观看| 麻豆国产入口在线观看免费| 国产亚洲精品免费| 久久精品亚洲综合| 免费看美女被靠到爽| 久久久久免费视频| 亚洲乱码中文论理电影| 亚洲高清成人一区二区三区| 久久精品免费观看| 亚洲日本成本人观看| 久久亚洲精品无码观看不卡| 2021在线观看视频精品免费| 九九精品国产亚洲AV日韩| 亚洲AV午夜成人片| 国产精品久久香蕉免费播放| a级毛片毛片免费观看永久|