天空是藍色的

          做好軟件為中國 #gcc -c helloworld.c -o helloworld.o //編譯目標文件 #gcc helloworld.o -o helloworld //編譯成可執行exe #helloworld //運行exe
          數據加載中……
          [轉載]session.flush()
          http://hairroot.blogchina.com/hairroot/1639334.html

          hibernate一個Session有一個Cache,cache屏蔽了應用程序直接去訪問數據庫,如果同一張table的同一row在先前已經被請求過,那么為何下次請求的時候還要去請求一次呢,把前面的cache住,再遇到這樣的請求直接返回cache里邊的即可。

          cache里邊的數據如果含有臟數據,需要跟數據庫同步(也就是需要hibernate來發送update, delete, insert),調用session.flush()達到此目的。一般情況下,hibernate在一個tx.commit()的時候會自動調用session.flush();也可以應用程序手動調用session.flush()來立刻將session的臟數據提交。
          Session session = HibernateSessionFactory.currentSession();
                  Transaction tx = session.beginTransaction();
                  try{
                   Employee employee1 
          = (Employee)session.load(Employee.class, new Integer(3));
                   System.out.println(employee1);
                   employee1.setAge((byte)98);
                   session.flush();//發送employee1的update給數據庫
          //         employee1.setAge((byte)43);
                   tx.commit();//employee1已經被flush過,不會再被flush。如果把上面以行代碼注釋取消,還會再發一條update語句。
                  }
                  catch(HibernateException e){
                      e.printStackTrace()
          ;
                      tx.rollback();
                  }

                   tx 
          = session.beginTransaction();
                  Employee employee2 = (Employee) session.load(Employee.class, new Integer(3));
                  employee2.setGender('f');
                  System.out.println(employee2);
                  tx.commit();

          session.flush()的動作執行的時候,session中cache不會被清空,所以上面的employee2和employee1返回的還是同一個實例。

          那些被flush()過的對象不會在下次flush()的時候再被flush()一次,除非兩次flush()中間又產生了新的臟數據。

          我認為應用程序基本上不需要顯示去調用session.flush();而交給tx.commit()去做就可以了。原因是:手動調用session.flush()雖然是往數據庫提交了update等sql語句,但是這些update真正的commit是在tx.commit()執行的時候。所以手動session.flush()后,其他的session或者是其他的應用程序看到的仍然還是數據庫以前的數據。(可以試驗)

          - 作者: HairRoot 2005年05月24日, 星期二 20:02

          posted on 2006-01-09 12:15 bluesky 閱讀(1508) 評論(0)  編輯  收藏 所屬分類: 工作總結

          主站蜘蛛池模板: 宾川县| 棋牌| 西吉县| 常州市| 科技| 怀来县| 怀柔区| 汉源县| 思茅市| 榆林市| 禄丰县| 杭锦后旗| 长宁区| 绥滨县| 永泰县| 义乌市| 锡林浩特市| 汉阴县| 灵山县| 烟台市| 康平县| 黔西| 德保县| 高唐县| 阿瓦提县| 教育| 平乐县| 泽州县| 韶山市| 吉林市| 永登县| 张家港市| 内江市| 永修县| 龙州县| 苍溪县| 乐山市| 汉寿县| 佛教| 景泰县| 金坛市|