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

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

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

    隨筆-124  評論-49  文章-56  trackbacks-0

    session flush測試:

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

    session在什么情況下執行flush
    1 默認在事務提交時
    2 顯式的調用flush
    3 在執行查詢前,如:iterate

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

      <id name="id">
       <generator class="uuid"/>
      </id>
      因為id的主鍵生成策略采用的是uuid,所以調用完save后,只是將user對象納入到session的管理
      不會發出insert語句,但是id已經生成,session中existsInDatebase狀態為false
      session.save(user);
      調用flush,hibernate會清理緩存,執行sql
      如果數據庫的隔離級別為提交讀,那么我們可以看到flush過的數據
      并且session中existsInDatebase狀態變為true
      session.flush();
      默認情況下commit操作會先執行者flush清理緩存,所以不用顯式的調用flush
      commit后數據無法回滾
      session.getTransaction().commit();
      
      <id name="id">
       <generator class="native"/>
      </id>
      如果id的主鍵生成策略采用的是native,調用save(user)時會發出insert語句,返回由數據庫生成的id,
      user對象納入到session的管理,session中existsInDatebase狀態為true
    -----------------------------------------------------------------
      <id name="id">
       <generator class="uuid"/>
      </id>
      session.save(user);
      將user對象從session中逐出,即session的EntiryEntries屬性中逐出
      session.evict(user);//清理緩存
      無法成功提交,因為hibernate在清理緩存時,在session的insertions集合中取出user對象進行insert操作后
      需要更新entityEntries屬性中的existsnDatabase為true,而我們采用evict已經將user從session中
      逐出了,所以找不到相關數據,無法更新,拋出異常
      session.getTransaction().commit();
    ----------------------------------------------------------------
      <id name="id">
       <generator class="uuid"/>
      </id>
      session.save(user);
      flush后hibernate會清理緩存,會將user對象保存到數據庫中,將session中的insertions中的user
      清除,并且設置session中existsInDatabase的狀態為true
      session.flush(user);
      將user對象從session中逐出,即session的EntityEntries屬性中逐出
      session.evict(user);//清理緩存
      可以成功提交,因為hibernate在清理緩存時,在session的insertions集合中無法找到user對象
      所以就不會發出insert語句,也不會更新session中的existsInDatabase的狀態
      session.getTransaction().commit();
    -----------------------------------------------------------------
      <id name="id">
       <generator class="native"/>
      </id>
      session.save(user);
      將user對象從session中逐出,即session的EntityEntries屬性中逐出
      session.evict(user);//清理緩存
      可以成功提交,因為hibernate在清理緩存時,在session的insertions集合中無法找到user對象
      所以就不會發出insert語句,也不會更新session中的existsInDatabase的狀態
      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();
      結果:
      insert into ...
      insert into ...
      update t_user ...
      hibernate按照save(insert),update,delete順序提交相關的操作
    -----------------------------------------------------------------
       <id name="id">
       <generator class="assigned"/>
      </id>
      session.save(user);
      user.setName("張三");
      session.update(user);
      因為我們在session.update(user)后執行了flush,所以在以commit清理緩存時執行flush前的sql就不會發出.
      session.flush();//在這里flush操作就可以了
      
      User user2=new User();
      user2.setId("003");
      user2.setName("李四");
      session.getTransaction().commit();
      結果:
      insert into ...
      update t_user ...
      insert into ...
      按照我們想要順序save(insert),update,save(insert)的順序提交操作
    -----------------------------------------------------------------

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

    評論:
    # re: hibernate基礎-Session_Flush 2014-04-15 00:00 | rejk
    你怎么查到的>?>  回復  更多評論
      
    主站蜘蛛池模板: 一区在线免费观看| 亚洲精品视频免费看| 精品国产日韩亚洲一区91| 热99RE久久精品这里都是精品免费| 麻豆va在线精品免费播放| 色吊丝最新永久免费观看网站| 亚洲av日韩av无码av| 成年在线观看网站免费| 亚洲综合偷自成人网第页色| 久久久久国色AV免费观看性色| 国产成人啪精品视频免费网| 亚洲日韩精品一区二区三区无码| 十八禁的黄污污免费网站| 国产亚洲美日韩AV中文字幕无码成人| 亚洲精品自产拍在线观看| 亚洲色一区二区三区四区| 国产男女猛烈无遮挡免费网站| 美女黄频免费网站| 亚洲综合图色40p| 免费国产va在线观看| 日韩精品亚洲aⅴ在线影院| 四虎国产精品永久免费网址| 亚洲精品乱码久久久久久下载| 久久午夜免费视频| 午夜在线亚洲男人午在线| 国产人在线成免费视频| 色天使亚洲综合一区二区| 在线亚洲97se亚洲综合在线| **aaaaa毛片免费| AV激情亚洲男人的天堂国语| 亚洲女初尝黑人巨高清| 久久久久久久91精品免费观看 | 亚洲图片一区二区| 一级毛片不卡免费看老司机| 亚洲AV综合色区无码一区爱AV| 一本岛v免费不卡一二三区| 亚洲视频一区调教| 免费看一级做a爰片久久| 免费91麻豆精品国产自产在线观看 | 久久精品成人免费网站| 亚洲免费福利在线视频|