Hibernate锁机制
Hibernate锁机制包括悲观锁和乐观锁。
1、悲观锁
它指的是对数据被外界修改持保守态度。假定一个事务在对指定数据做操作时,都可能有另外一个事务同时在对当前数据做操作,为了保证对数据操作的完整性和一致性,于是采取了在数据库级别的锁定状态,依靠数据库提供的锁机制来实现。
select * from account where id =1 for update
在查询的过程中,数据库处于锁定状态,任何其它的针对本条数据的操作都会被延迟,本次事务提交后解除锁定。
hibernate悲观锁实现如下:
String sql="查询语句"; Query query=session.createQuery(sql); query.setLockMode("对象",LockModel.UPGRADE);
LockMode.UPGRADE:利用数据库的for update字句加锁。
2、乐观锁
乐观锁则乐观的认为当前事务所操作的数据很少被其它事务所操作,因为不做数据库层次上的锁定,为了维护数据的正确,乐观锁采用在应用程序使用版本控制的方法实现。
实体类中增加version属性(数据库也会对应生成该字段,初始值为0),并在其get方法前加@Version注解,则在操作
过程中没更新一次该行数据则version值加1,即可在事务提交前判断该数据是否被其他事务修改过。