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

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

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

    隨筆-124  評(píng)論-49  文章-56  trackbacks-0

    session flush測(cè)試:

    session flush方法主要做了兩件事:
    1 清理緩存
    2 執(zhí)行sql(不是提交事務(wù))

    session在什么情況下執(zhí)行flush
    1 默認(rèn)在事務(wù)提交時(shí)
    2 顯式的調(diào)用flush
    3 在執(zhí)行查詢前,如:iterate

    hibernate按照save(insert),update,delete順序提交相關(guān)的操作
    ------------------------------------------------------------------------

      <id name="id">
       <generator class="uuid"/>
      </id>
      因?yàn)閕d的主鍵生成策略采用的是uuid,所以調(diào)用完save后,只是將user對(duì)象納入到session的管理
      不會(huì)發(fā)出insert語(yǔ)句,但是id已經(jīng)生成,session中existsInDatebase狀態(tài)為false
      session.save(user);
      調(diào)用flush,hibernate會(huì)清理緩存,執(zhí)行sql
      如果數(shù)據(jù)庫(kù)的隔離級(jí)別為提交讀,那么我們可以看到flush過(guò)的數(shù)據(jù)
      并且session中existsInDatebase狀態(tài)變?yōu)閠rue
      session.flush();
      默認(rèn)情況下commit操作會(huì)先執(zhí)行者flush清理緩存,所以不用顯式的調(diào)用flush
      commit后數(shù)據(jù)無(wú)法回滾
      session.getTransaction().commit();
      
      <id name="id">
       <generator class="native"/>
      </id>
      如果id的主鍵生成策略采用的是native,調(diào)用save(user)時(shí)會(huì)發(fā)出insert語(yǔ)句,返回由數(shù)據(jù)庫(kù)生成的id,
      user對(duì)象納入到session的管理,session中existsInDatebase狀態(tài)為true
    -----------------------------------------------------------------
      <id name="id">
       <generator class="uuid"/>
      </id>
      session.save(user);
      將user對(duì)象從session中逐出,即session的EntiryEntries屬性中逐出
      session.evict(user);//清理緩存
      無(wú)法成功提交,因?yàn)閔ibernate在清理緩存時(shí),在session的insertions集合中取出user對(duì)象進(jìn)行insert操作后
      需要更新entityEntries屬性中的existsnDatabase為true,而我們采用evict已經(jīng)將user從session中
      逐出了,所以找不到相關(guān)數(shù)據(jù),無(wú)法更新,拋出異常
      session.getTransaction().commit();
    ----------------------------------------------------------------
      <id name="id">
       <generator class="uuid"/>
      </id>
      session.save(user);
      flush后hibernate會(huì)清理緩存,會(huì)將user對(duì)象保存到數(shù)據(jù)庫(kù)中,將session中的insertions中的user
      清除,并且設(shè)置session中existsInDatabase的狀態(tài)為true
      session.flush(user);
      將user對(duì)象從session中逐出,即session的EntityEntries屬性中逐出
      session.evict(user);//清理緩存
      可以成功提交,因?yàn)閔ibernate在清理緩存時(shí),在session的insertions集合中無(wú)法找到user對(duì)象
      所以就不會(huì)發(fā)出insert語(yǔ)句,也不會(huì)更新session中的existsInDatabase的狀態(tài)
      session.getTransaction().commit();
    -----------------------------------------------------------------
      <id name="id">
       <generator class="native"/>
      </id>
      session.save(user);
      將user對(duì)象從session中逐出,即session的EntityEntries屬性中逐出
      session.evict(user);//清理緩存
      可以成功提交,因?yàn)閔ibernate在清理緩存時(shí),在session的insertions集合中無(wú)法找到user對(duì)象
      所以就不會(huì)發(fā)出insert語(yǔ)句,也不會(huì)更新session中的existsInDatabase的狀態(tài)
      session.getTransaction().commit();
    -----------------------------------------------------------------
        <id name="id">
       <generator class="assigned"/>
      </id>
      session.save(user);
      user.setName("張三");
      session.update(user);
      User user2=new User();
      user2.setId("003");
      user2.setName("李四");
      session.getTransaction().commit();
      結(jié)果:
      insert into ...
      insert into ...
      update t_user ...
      hibernate按照save(insert),update,delete順序提交相關(guān)的操作
    -----------------------------------------------------------------
       <id name="id">
       <generator class="assigned"/>
      </id>
      session.save(user);
      user.setName("張三");
      session.update(user);
      因?yàn)槲覀冊(cè)趕ession.update(user)后執(zhí)行了flush,所以在以commit清理緩存時(shí)執(zhí)行flush前的sql就不會(huì)發(fā)出.
      session.flush();//在這里flush操作就可以了
      
      User user2=new User();
      user2.setId("003");
      user2.setName("李四");
      session.getTransaction().commit();
      結(jié)果:
      insert into ...
      update t_user ...
      insert into ...
      按照我們想要順序save(insert),update,save(insert)的順序提交操作
    -----------------------------------------------------------------

    posted on 2009-11-03 16:37 junly 閱讀(1232) 評(píng)論(1)  編輯  收藏 所屬分類: hibernate/orm

    評(píng)論:
    # re: hibernate基礎(chǔ)-Session_Flush 2014-04-15 00:00 | rejk
    你怎么查到的>?>  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 日韩在线视频免费| 亚洲国产精品高清久久久| 欧美最猛性xxxxx免费| 777爽死你无码免费看一二区| 无码午夜成人1000部免费视频| 中国性猛交xxxxx免费看| 人人公开免费超级碰碰碰视频| 免费看黄网站在线看| 男男黄GAY片免费网站WWW| 毛片亚洲AV无码精品国产午夜| 疯狂做受xxxx高潮视频免费| 无码日韩人妻AV一区免费l| 日韩久久无码免费毛片软件| sss在线观看免费高清| 久久免费99精品国产自在现线| 一级**爱片免费视频| AAAAA级少妇高潮大片免费看| 中文字幕在线免费观看视频| 美女视频黄的免费视频网页| 99久久99热精品免费观看国产| 久久午夜夜伦鲁鲁片免费无码影视 | 中国xxxxx高清免费看视频| 亚洲一级毛片免费在线观看| 一二三四在线播放免费观看中文版视频 | 在线播放免费人成毛片乱码| 久久青草免费91线频观看不卡 | 亚洲AV日韩AV永久无码色欲| 免费夜色污私人影院网站| 精品免费久久久久国产一区 | 美女一级毛片免费观看 | 亚洲美女免费视频| 中文文字幕文字幕亚洲色| 亚洲AV无码成人精品区狼人影院 | 亚洲一区二区三区高清不卡| 亚洲成熟丰满熟妇高潮XXXXX| 免费精品国自产拍在线播放| 99久久成人国产精品免费| 在线观看免费中文视频| 女人张腿给男人桶视频免费版| 亚洲av再在线观看| 久久精品夜色国产亚洲av|