Hibernate的悲观锁并发控制机制及LockMode

1. 悲观锁的并发控制机制概述
默认事务之间会产生数据冲突,所以要求事务在读取数据的时候就对数据加锁;
该锁将一直被事务持有,直到事务结束才会释放锁。

2. Hibernate的悲观锁机制
Hibernate的悲观锁机制完全依赖JDBC连接或JTA资源实现,Hibernate不能在Session缓存中加任何锁,只能为JDBC连接设置隔离级别。


3. Hibernate的org.hibernate.LockMode枚举类

  • LockMode.READ,事务的隔离级别是Repeatable Read或Serializable时,请求读取数据库记录时自动获得
  • LockMode.WRITE,请求插入或更新数据库记录时自动获得
  • LockMode.OPTIMISTIC,乐观锁
  • LockMode.OPTIMISTIC_FORCE_INCREMENT,乐观锁
  • LockMode.PESSIMISTIC_READ,与LockMode.PESSIMISTIC_WRITE相同
  • LockMode.PESSIMISTIC_WRITE,事务开始即获得数据库的锁
  • LockMode.PESSIMISTIC_FORCE_INCREMENT,事务开始即设置version
  • LockMode.UPGRADE,已过时,应用的查询请求使用SELECT ... FOR UPDATE时获得
  • LockMode.UPGRADE_NOWAIT,Oracle应用的查询请求使用SELECT ... FOR UPDATE NOWAIT时获得
  • LockMode.UPGRADE_SKIPLOCKED,Oracle应用的查询请求使用SELECT ... FOR UPDATE SKIP LOCKED时获得,SQL Server应用的查询请求使用SELECT ... with (rowlock, updlock, readpast)时获得
  • LockMode.FORCE,已过时,被PESSIMISTIC_FORCE_INCREMENT替换
  • LockMode.NONE,取消任何锁,如事务结束后的所有对象,或执行了Session的update()、saveOrUpdate()的对象


4. LockMode设置只有在进行如下调用时才生效:
  • 调用Session.load(),并设置了LockMode
  • 调用Session.lock()
  • 调用Query.setLockMode()
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值