Java蜘蛛人 歡迎大家

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

          導(dǎo)航

          <2008年2月>
          272829303112
          3456789
          10111213141516
          17181920212223
          2425262728291
          2345678

          常用鏈接

          留言簿(14)

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          失誤
          悲觀鎖.
          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("帳戶被其他的事物修改.本事務(wù)撤銷. 稍后在試..!");
                  }
              }
              
              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("帳戶被其他的事物修改.本事務(wù)撤銷. 稍后在試..! 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 樂觀鎖  回復(fù)  更多評論   

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

          # re: Hibernate 悲觀鎖 and 樂觀鎖  回復(fù)  更多評論   

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

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

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 石台县| 沽源县| 长汀县| 岳普湖县| 时尚| 德安县| 景东| 东山县| 平塘县| 房产| 浙江省| 太湖县| 苍山县| 修武县| 兰溪市| 五莲县| 济南市| 平泉县| 东兴市| 衡阳市| 鹤壁市| 瓦房店市| 麻栗坡县| 上林县| 鄂伦春自治旗| 邹平县| 新巴尔虎左旗| 乡城县| 武乡县| 蒙阴县| 和田县| 云霄县| 遵义市| 同心县| 明水县| 江山市| 八宿县| 昌平区| 大同县| 黔东| 昭苏县|