Java蜘蛛人 歡迎大家

          歡迎大家 來到我的blog , 如果我身邊的朋友 有什么不懂可以直接來問我 我會細心的幫助你的. 如果網絡上的朋友有什么不懂的 可以加我Java蜘蛛人 QQ48187537
          posts - 54, comments - 192, trackbacks - 0, articles - 1

          失誤
          悲觀鎖.
          Acc acc=(Acc)session.get(Acc.class,new Long(1),LockMode.UPGRADE);   假如這個事物開始了 其他的失誤不能訪問的, 知道這個事物提交之后 然后再解鎖
          樂觀鎖
          在建表時候 增加一個 version interger
          然后再Acc.hbm.xml里
          id  后面 添加
          <version  name="version" column="VERSION"  />

          注意 例子中 捕獲StaleObjectStateException  這個異常
          例子 

          package com.zcq.dao2;

          import org.hibernate.Session;
          import org.hibernate.SessionFactory;
          import org.hibernate.StaleObjectStateException;
          import org.hibernate.Transaction;
          import org.hibernate.cfg.Configuration;

           

          public class Test extends Thread {
              public Test()
              {
                  
              }
              
              private String tran;
              
              Configuration config
          =new Configuration().configure();
              SessionFactory factory
          =config.buildSessionFactory();
              Session     session
          =factory.openSession();
             
              
              public Test(String tran)
              {
                  this
          .tran=tran;
              }
              
              
              
          @Override
              public void run() {
                  try {
                       
          if(tran.equals("tran"))
                           show();
                       
          else
                           show1();
                      
                  } catch (Exception e) {
                      e
          .printStackTrace();
                      
          // TODO: handle exception
                  }
              
              }
              public void show()throws Exception
              { 
                  Transaction tx
          =null;
                  try {
                  
              
                      tx
          = session.beginTransaction();
                      Thread
          .sleep(500);
                      
                      Accounts accounts
          =(Accounts)session.get(Accounts.class,new Long(1));
                      Thread
          .sleep(500);
                      
                      accounts
          .setBalance(accounts.getBalance()+100);
                      tx
          .commit();
                      Thread
          .sleep(500);
                          
                  } catch (StaleObjectStateException e) {
                      
          if(tx!=null)
                      {
                        tx
          .rollback();
                      }
                      e
          .printStackTrace();
                      
          System.out.println("帳戶被其他的事物修改.本事務撤銷. 稍后在試..!");
                  }
              }
              
              public void show1()throws Exception
              {
                  Transaction tran
          =null;
                   try {
                       tran
          = session.beginTransaction();
                       Thread
          .sleep(500);
                       Accounts accounts
          =(Accounts)session.get(Accounts.class,new Long(1));
                       
                       Thread
          .sleep(500);
                       accounts
          .setBalance(accounts.getBalance()-100);
                       tran
          .commit();
                       Thread
          .sleep(500);
                  } catch (StaleObjectStateException e) {
                      
          if(tran!=null)
                      {
                          tran
          .rollback();
                      }
                      e
          .printStackTrace();
                      
          System.out.println("帳戶被其他的事物修改.本事務撤銷. 稍后在試..! show1");
                      
          // TODO: handle exception
                  }
                  
                  
                  
              }
              public void asd()
              {
                  session
          .beginTransaction();
                  Accounts accounts
          =new Accounts();
                  accounts
          .setName("zcq");
                  accounts
          .setBalance(1000.00);
                  session
          .save(accounts);
                  
                  session
          .beginTransaction().commit();
              }
              
              public void closeSession()
              
              {
                  
          if(session!=null)
                  {
                      session
          .close();
                      session
          =null;
                  }
              }
              
              
              public static void main(String[] args) {
                  
                  Test aa
          =new Test();
                   
                  
                  Thread show
          =new Test("tran");
                  Thread show1
          =new Test("tran2");
                  
                  show
          .start();
                  
                  show1
          .start();
                  
                  
                 aa
          .closeSession();
                  
              }
          }

          Feedback

          # re: Hibernate 悲觀鎖 and 樂觀鎖  回復  更多評論   

          2008-05-15 20:49 by jdlsfl
          不錯

          # re: Hibernate 悲觀鎖 and 樂觀鎖  回復  更多評論   

          2008-11-28 19:55 by 月亮之上
          很好,在處理并發業務的時候需要根據具體情況作出選擇。

          # re: Hibernate 悲觀鎖 and 樂觀鎖[未登錄]  回復  更多評論   

          2010-04-30 11:31 by 菜鳥
          剛學不是很理解

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


          網站導航:
           
          主站蜘蛛池模板: 洪洞县| 灵丘县| 岳池县| 桑植县| 和林格尔县| 南召县| 仙桃市| 旬阳县| 闽侯县| 霍州市| 崇礼县| 饶阳县| 黄大仙区| 都江堰市| 安义县| 黄冈市| 潼关县| 连州市| 丹阳市| 久治县| 桐庐县| 柳江县| 蒙城县| 梓潼县| 长汀县| 江门市| 甘德县| 紫云| 曲沃县| 宁都县| 镇坪县| 鹤岗市| 桐庐县| 乐陵市| 临湘市| 都昌县| 博乐市| 民乐县| 绵阳市| 天峨县| 滨海县|