hibernate支持两种锁:悲观锁(Pessimistic Locking)和乐观锁(Optimistic Locking)
悲观锁:指的是对数据库数据被外界的修改持保守态度(无论是本系统的事务处理,或者是外部系统的事务处理),在整个数据处理的过程数据都处于锁定的状态。hibernate中的悲观锁,是依靠数据库中的锁机制(因为只有数据库层才能控制本系统和外部系统对数据库的数据操作)。
例如”select * from user where userName=’Johnson’ for update“这条sql锁定了user表中所有userName=’Johnson’的记录,本次事务提交之前,外界无法修改这些记录。
hibernate中的悲观锁,也是基于数据库的锁机制实现的。
String hqlStr ="from TUser as user where user.name='Lili'";
Query query = session.createQuery(hqlStr);
query.setLockMode("user",LockMode.UPGRADE); //加锁
List userList = query.list();//执行查询,获取数据
上面的代码中setLockMode第一个参数指定了别名为user的返回的记录进行上锁。
生成的sql为: