初学hibernate,今天看到了悲观锁与乐观锁。
在做悲观锁的实验时,发现一个问题,有点想不明白。希望大家帮助一下。
我写了两个单元测试方法,一个使用session.load(Class theClass, Serializable id, LockOptions lockOptions)
使用LockOptions.UPGRADE。另一个方法中使用session.load(Class theClass, Serializable id),我在第一个测试方法
中加入断点,然后在提交事务之前运行第二个测试方法,发现第二个可以执行。
但是我所看到的资料说hibernate中悲观锁是通过数据库机制实现的,mysql中就是for update。那应该在事务提交前第二个方法是无法运行,应该阻塞啊。
是不是我哪里出错了,希望大家指正,谢谢。
新人,分不多。
在做悲观锁的实验时,发现一个问题,有点想不明白。希望大家帮助一下。
我写了两个单元测试方法,一个使用session.load(Class theClass, Serializable id, LockOptions lockOptions)
使用LockOptions.UPGRADE。另一个方法中使用session.load(Class theClass, Serializable id),我在第一个测试方法
中加入断点,然后在提交事务之前运行第二个测试方法,发现第二个可以执行。
但是我所看到的资料说hibernate中悲观锁是通过数据库机制实现的,mysql中就是for update。那应该在事务提交前第二个方法是无法运行,应该阻塞啊。
是不是我哪里出错了,希望大家指正,谢谢。
新人,分不多。
另外只有在查询开始之前(也就是 Hiberate 生成 SQL 之前)设定加锁,才会
真正通过数据库的锁机制进行加锁处理,否则,数据已经通过不包含 for update
子句的 Select SQL 加载进来,所谓数据库加锁也就无从谈起。