概述
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()
最后
以上就是淡然吐司为你收集整理的Hibernate的悲观锁并发控制机制及LockMode的全部内容,希望文章能够帮你解决Hibernate的悲观锁并发控制机制及LockMode所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复