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

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

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

    Java蜘蛛人 歡迎大家

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

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

    注意 例子中 捕獲StaleObjectStateException  這個(gè)異常
    例子 

    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ù)  更多評(píng)論   

    2008-05-15 20:49 by jdlsfl
    不錯(cuò)

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

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

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

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日韩毛片在线免费观看| 免费的一级片网站| 免费在线观看亚洲| 亚洲午夜久久久久久尤物| 亚洲一级特黄大片无码毛片| 女人被免费视频网站| 毛片在线全部免费观看| 一级毛片试看60分钟免费播放| 亚洲av专区无码观看精品天堂| 狠狠色伊人亚洲综合成人| 免费日本黄色网址| 成年女人喷潮毛片免费播放| 最近中文字幕高清免费中文字幕mv| 久久久久久毛片免费看| 香蕉视频在线观看免费| 中文日韩亚洲欧美制服| 亚洲乱码卡一卡二卡三| 亚洲视频免费在线观看| 亚洲国产精品VA在线观看麻豆| 亚洲第一黄片大全| 亚洲AV伊人久久青青草原 | mm1313亚洲精品国产| 免费视频淫片aa毛片| 无码免费午夜福利片在线| 最近中文字幕电影大全免费版| 久久精品电影免费动漫| 怡红院免费全部视频在线视频| 一级毛片免费在线观看网站| 美景之屋4在线未删减免费| 久久无码av亚洲精品色午夜| 亚洲1区2区3区精华液| 久久无码av亚洲精品色午夜 | 国产一精品一AV一免费| 国产无遮挡色视频免费观看性色| 日本激情猛烈在线看免费观看| 婷婷亚洲综合一区二区| 成人亚洲国产精品久久| 免费人人潮人人爽一区二区| 国产亚洲综合视频| 成年网站免费入口在线观看| 乱淫片免费影院观看|