Loading...

          java .net

          hibernate的save()疑惑

          剛整明白一個,呵呵,笨
          hibernate save的時候必須啟用事務,也就是必須
          beginTransaction();
          然后
          commit();
          要不然不會insert

          看孫衛琴.精通Hibernate:Java對象持久化技術詳解上講
          調用save方法后,hibernate并不會立即insert,而是保存在緩存里,等清理緩存時再insert
          什么時候清理緩存呢?
          1、事務commit();
          2、find方法(hibernate3被廢)
          3、顯示調用flush();
          而為什么不用事務,只是在save();后直接顯示調用flush();還是沒有insert呢?
          參考csdn的一個帖子http://topic.csdn.net/u/20080603/19/d6918606-3a62-43a4-b63d-cd292242bbc6.html
          因為數據源的問題
          真正的原因是數據源conn默認的提交方式,hibernate不管這件事,大部分開源數據源都是默認false的

          我試了hibernate的默認連接池,和tomcat中配的連接池用使用事務都沒有insert。
          下面這段代碼能夠insert可以說明一些問題
              public static void main(String[] args) throws Exception {
          SessionFactory sf
          =HibernateSessionFactory.getSessionFactory();
          Session session
          =sf.openSession();
          System.out.println(session.connection().getAutoCommit());
          session.connection().setAutoCommit(
          true);
          User u
          =new User();
          u.setName(
          "aaa");
          session.save(u);
          }

          }
          而commit和flush的區別就是commit先flush再提交,而flush沒有提交
          而在close的時候,孫衛琴.精通Hibernate:Java對象持久化技術詳解上講的是hibernate會清空緩存,一個清理,一個清空,一字之差,呵呵

          posted on 2008-08-26 22:07 閱讀(789) 評論(0)  編輯  收藏


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


          網站導航:
           

          公告

          希望有一天

          我能用鼠標雙擊我的錢包

          然后選中一張100元

          按住“ctrl+c”

          接著不停的“ctrl+v”

          嘻嘻~~~笑醒~~~



          導航

          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統計

          常用鏈接

          留言簿(6)

          隨筆分類(102)

          隨筆檔案(398)

          文章分類

          文章檔案(10)

          有趣網絡

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 五大连池市| 开原市| 精河县| 咸丰县| 京山县| 略阳县| 东乡县| 宾阳县| 靖宇县| 庆云县| 新乡市| 米易县| 开阳县| 永登县| 城固县| 营山县| 乐至县| 广安市| 九江县| 平和县| 报价| 玉树县| 大同县| 安康市| 自治县| 分宜县| 都昌县| 乌鲁木齐市| 大宁县| 夏河县| 连平县| 大名县| 饶阳县| 衡阳县| 潍坊市| 临桂县| 息烽县| 铁岭县| 建昌县| 安徽省| 镇赉县|