现在想测试一下hibernate的悲观锁问题
public void testLoad1(){//这个方法模拟用户一调试运行
session=HibernateSessionFactory.getSession();
tx=session.beginTransaction();
User user=(User)session.load(User.class, 3,LockMode.UPGRADE);
System.out.println(user.getName());//调试到这里停止执行 模拟用户一 用悲观锁 锁住数据
session.setName("王五");
System.out.println(user.getId());
tx.commit();
...
}
public void testLoad2(){//这个方法模拟用户二直接运行,按道理应该他只发出sql就一直等待用户一commit以后才能对数据进行操作呀,可却能运行过!
session=HibernateSessionFactory.getSession();
tx=session.beginTransaction();
User user=(User)session.load(User.class, 3,LockMode.UPGRADE);
System.out.println(user.getName());
session.update(user);
System.out.println(user.getId());
tx.commit();
...
}
代码运行正常,就是用户一 好像没锁住,hibernate发出的sql后面没有加上for update ,用的是MS SQL数据库 苦思不得其解
public void testLoad1(){//这个方法模拟用户一调试运行
session=HibernateSessionFactory.getSession();
tx=session.beginTransaction();
User user=(User)session.load(User.class, 3,LockMode.UPGRADE);
System.out.println(user.getName());//调试到这里停止执行 模拟用户一 用悲观锁 锁住数据
session.setName("王五");
System.out.println(user.getId());
tx.commit();
...
}
public void testLoad2(){//这个方法模拟用户二直接运行,按道理应该他只发出sql就一直等待用户一commit以后才能对数据进行操作呀,可却能运行过!
session=HibernateSessionFactory.getSession();
tx=session.beginTransaction();
User user=(User)session.load(User.class, 3,LockMode.UPGRADE);
System.out.println(user.getName());
session.update(user);
System.out.println(user.getId());
tx.commit();
...
}
代码运行正常,就是用户一 好像没锁住,hibernate发出的sql后面没有加上for update ,用的是MS SQL数据库 苦思不得其解
解决方案 »
- 一个小程序有错,帮忙看下
- Blob在ibatis如何存取普通的txt或word格式的文件。
- hibernate的Object[] parameters参数问题
- shell在java ee应用中一般有什么应用 ?
- 100分求助,quartz触发时间的奇怪问题
- 关于Jdk环境变量设置
- 请问cmp ejb中,当通过ejb来创建记录时,如何使用oracle的自增序列为主键?
- 在JBoss里面怎么配置JMS的连接工厂?
- XML String 解析问题!!!急急急!!!
- Sturts中用 BeanUtils.copyProperties 拷贝PO大VO出现异常,求助
- 关于struts2配置文件,官方的namespace解释和实际不一样
- struts2验证框架问题
只有 DECLARE CURSOR 才允许使用 FOR UPDATE 子句。