博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate的悲观锁并发控制机制及LockMode
阅读量:4177 次
发布时间:2019-05-26

本文共 1014 字,大约阅读时间需要 3 分钟。

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()

转载地址:http://rilai.baihongyu.com/

你可能感兴趣的文章
WSDL文件解析
查看>>
MyEclipse安装Flash Builder插件
查看>>
MPP使用随笔(统计工作量)
查看>>
单点登录(一)-----理论-----单点登录SSO的介绍和CAS+选型
查看>>
你的简历能帮你争取到面试机会吗?
查看>>
CAD破解方法(一)
查看>>
Java开源项目地址
查看>>
浅析不可不知的数据库读现象
查看>>
阿里巴巴去Oracle数据迁移同步工具(全量+增量,目标支持MySQL/DRDS)
查看>>
分布式开发系统架构(一)
查看>>
分布式开发系统架构(二)
查看>>
Oracle数据库连接其他数据库(DB2/sql server)
查看>>
Jsp页面获取properties文件中的数据
查看>>
Spring mvc + mybatis web项目当系统启动时自动调用某个方法
查看>>
SSM+Netty框架搭建
查看>>
Flex开发debug集合
查看>>
Sql Server 2008 连接 Oracle11数据库
查看>>
远程到服务器,页面为桌面背景,没有图标
查看>>
Oracle连接Sql Server (win32_11gR2_gateways)
查看>>
ORA-00600: 内部错误代码, 参数: [19004]
查看>>