乐观锁问题

来源:互联网 发布:华为畅享5手机壳淘宝 编辑:程序博客网 时间:2024/04/30 09:13

Account ao1 = (Account) session1.load(Account.class, new Long(28));
  Account ao2 = (Account) session2.load(Account.class, new Long(28));

如果Account ao2 = (Account) session2.load("Account", new Long(28))就出现不同步,只更新前一部分(ao1);



   if(tx2 != null)
   {
    tx2.rollback();   //有同步数据库的作用
    updateEntity2();
   }

 

hibernate》hbm.xml设置:<property name="hibernate.connection.isolation">2</property>隔离级别

 

//测试乐观锁
  Session session1=sf.openSession();
  Session session2=sf.openSession();
  
  
  Transaction tx1 = session1.beginTransaction();
  Transaction tx2 = session2.beginTransaction();
  
  try{
  
  Account ao1 = (Account) session1.load(Account.class, new Long(28));
  Account ao2 = (Account) session2.load(Account.class, new Long(28));
  //这时候,两个版本号是相同的
  ao1.setMoney(ao1.getMoney()+10);
  tx1.commit();  
  //这时候,两个版本号是不相同的
  ao2.setMoney(ao2.getMoney()+10);
  tx2.commit();
  System.out.println("OK!");
  }catch(Exception e){
   //System.out.println(e);
   if(tx2 != null)//有同步数据库的作用
   {
    tx2.rollback();
    updateEntity2();
   }
   else if(tx1 != null)//有同步数据库的作用
   {
    tx1.rollback();
    updateEntity2();
   }

 

void updateEntity2() {
  //测试乐观锁
  Session session1=sf.openSession();  
  
  Transaction tx1 = session1.beginTransaction();

  try{  
  Account ao1 = (Account) session1.load(Account.class, new Long(28));
 
  //这时候,两个版本号是不相同的
  ao1.setMoney(ao1.getMoney()+10);
  tx1.commit();
  System.out.println("OK2!");
  }catch(Exception e){
   //System.out.println(e);
   if(tx1 != null)//有同步数据库的作用
   {
    tx1.rollback();
    updateEntity();
   }
   
  }finally{
   session1.close();
  }
  
 }

 

原创粉丝点击