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

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

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

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



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



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



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



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


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

    posted on 2005-07-12 18:49 小米 閱讀(4900) 評(píng)論(5)  編輯  收藏 所屬分類: Hibernate

    評(píng)論:
    # re: 《深入淺出Hibernate》讀書筆記(5)——持久層操作 2005-12-16 16:08 | Sometimes Java
    對(duì)find和iterate兩個(gè)查詢方法的比較,并不完善,你這種斷章取義的總結(jié)容易誤導(dǎo)別人.

    你的敘述在暗示一種結(jié)論:iterate方法比find更好,因?yàn)樗玫睦昧司彺?實(shí)際的情況是,如果使用了iterate方法返回Iterator類型的查詢結(jié)果,那么你一旦關(guān)閉session,Iterator中的數(shù)據(jù)立即就會(huì)消失.而通過find得到的List則不會(huì)如此,我想大部分人的使用習(xí)慣都是操作完成后立即關(guān)閉session,很多公司也強(qiáng)制要求這樣做.

    Iterator的另一個(gè)麻煩事是fail-fast,在多線程環(huán)境下,很容易產(chǎn)生.使用線程安全的List子類,則不會(huì)有這個(gè)問題  回復(fù)  更多評(píng)論
      
    # 學(xué)習(xí)到新東西了,) 2006-03-30 10:39 | SunofMay
    謝謝!
    希望能看到更多好的東西!  回復(fù)  更多評(píng)論
      
    # re: 《深入淺出Hibernate》讀書筆記(5)——持久層操作 2006-10-19 15:34 | lujh
    而get方法并不永遠(yuǎn)直接返回實(shí)體類,當(dāng)某對(duì)象已經(jīng)由于其他對(duì)象的關(guān)聯(lián)而產(chǎn)生了代理類對(duì)象時(shí),用get方法返回的仍是該代理對(duì)象。  回復(fù)  更多評(píng)論
      
    # re: 《深入淺出Hibernate》讀書筆記(5)——持久層操作 2006-10-19 15:36 | lujh
    這不知道是不是一個(gè)bug
      回復(fù)  更多評(píng)論
      
    # re: 《深入淺出Hibernate》讀書筆記(5)——持久層操作 2008-05-29 13:19 | dreamli
    寫的很好!  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 日本高清在线免费| 亚洲免费一级视频| 成年女人视频网站免费m| 麻豆成人精品国产免费| 一本色道久久88亚洲综合| 国产午夜亚洲精品国产成人小说| 久久久久久久久亚洲| 亚洲色在线无码国产精品不卡| 美女视频免费看一区二区| 免费看一区二区三区四区| 99久久综合国产精品免费| 亚洲无码精品浪潮| 亚洲AV色吊丝无码| 免费看一区二区三区四区| 亚洲国产成人片在线观看无码| 亚洲一区二区三区播放在线| 扒开双腿猛进入爽爽免费视频| 亚洲欧洲精品成人久久曰| 一级毛片成人免费看免费不卡| 夫妻免费无码V看片| 亚洲免费在线视频| 特级毛片免费观看视频| 亚洲一区二区三区在线观看精品中文| 亚洲av永久无码一区二区三区| 最近中文字幕免费完整| 亚洲日韩一页精品发布| 久久久精品2019免费观看 | 曰批全过程免费视频网址| 亚洲成AⅤ人影院在线观看| 亚洲国产精品自在自线观看| 免费中文字幕在线| 亚洲AV日韩AV永久无码色欲| 手机在线看永久av片免费| 国产亚洲综合一区二区三区| 免费看片免费播放| 国产免费MV大全视频网站| 免费大黄网站在线观看| 免费av一区二区三区| 亚洲av片劲爆在线观看| 成年美女黄网站色大免费视频| 精品免费久久久久国产一区 |