怎么实现hibernate悲观锁和乐观锁?

隔离级别的安全控制是整体一个大的方面,而锁机制更加的灵活,它执行的粒度可以很小,可以在一个事务中存在。

Hibernate悲观锁是依靠底层数据库的锁机制实现,在查询query.setLockMode(),

hibernate的加锁模式有:

LockMode.NONE :无锁机制。

LockMode.WRITE :Hibernate在 Insert和 Update记录的时候会自动获取。

LockMode.READ :Hibernate在读取记录的时候会自动获取。

以上这三种锁机制一般由 Hibernate内部使用,如Hibernate为了保证 Update过程中对象不会被外界修改,会在 save 方法实现中自动为目标对象加上 WRITE锁。

LockMode.UPGRADE :利用数据库的 for update 子句加锁。

LockMode. UPGRADE_NOWAIT : Oracle的特定实现,利用 oracle的 for update nowait子句实现加锁。

加锁方法实现:

Criteria.setLockMode

Query.setLockMode

Session.lock

悲观锁会带大量的性能开销。乐观锁是Hibernate在内存实现的,提供了3种实现:

1.基于version:读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一

2.基于timestamp:

乐观锁只须在<hibernate-mapping>配置中配置

原文地址:https://www.cnblogs.com/huigee/p/9758294.html