现在想测试一下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数据库 苦思不得其解
解决方案 »
- 最近领导让我用hibernate+Spring整合做个模块,但是不是很熟悉,会,但是不是很精通..大家有什么速成的好书或者资料推荐么,只有五天时间。
- eclipse里的一个web应用访问jsp文件时路径出错
- servlet急
- hibernate和数据库断开连接问题
- 请问ResultSet 在数据表为空情况下 返回什么值
- struts资源文件中的bad key该怎么定义?
- 关于websphere疑问,请进(急!!!1)
- 这个查询错在哪里?hibernate
- 上传图片附件,判断图片大小
- webwork2中的Resource Bundle怎么配置?
- 关于struts2配置文件,官方的namespace解释和实际不一样
- struts2验证框架问题
只有 DECLARE CURSOR 才允许使用 FOR UPDATE 子句。