我是靠谱客的博主 淡然吐司,最近开发中收集的这篇文章主要介绍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()

最后

以上就是淡然吐司为你收集整理的Hibernate的悲观锁并发控制机制及LockMode的全部内容,希望文章能够帮你解决Hibernate的悲观锁并发控制机制及LockMode所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部