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,即可在事务提交前判断该数据是否被其他事务修改过。

相关推荐