锁(locking)
1
String hqlStr
=
"
from TUser as user where user.name=’Erica’
"
;
2 Query query = session.createQuery(hqlStr); 3 query.setLockMode( " user " ,LockMode.UPGRADE); // 加锁 4 List userList = query.list(); // 执行查询, 获取数据 query.setLockMode 对查询语句中特定别名所对应的记录进行加锁(我们为 TUser类指定了一个别名“user”),这里也就是对返回的所有user记录进行加锁。 观察运行期Hibernate生成的SQL语句:
1
select tuser0_.id as id, tuser0_.name as name, tuser0_.group_id as group_id, tuser0_.user_type as user_type, tuser0_.sex as sex from t_user tuser0_ where (tuser0_.name
=
’Erica’ )
for
update
这里Hibernate通过使用数据库的for update子句实现了悲观锁机制。 Hibernate的加锁模式有:
<
hibernate
-
mapping
>
< class name = " org.hibernate.sample.TUser " table = " t_user " dynamic - update = " true " dynamic - insert = " true " optimistic - lock = " version " > …… </ class > </ hibernate - mapping > optimistic-lock属性有如下可选取值: |
hibernate中的悲观锁和乐观锁的实现
最新推荐文章于 2024-02-14 22:44:20 发布