Hibernate的LockMode
来源:互联网 发布:淘宝客关闭后多久生效 编辑:程序博客网 时间:2024/06/07 18:34
原文转载自http://blog.sina.com.cn/s/blog_6ac4c6cb010186cn.html
在了解Hibernate的LockMode之前,我们先讲一下LockMode是什么东西?其实LockMode只是在使用Hibernate 中 的session.load()加载数据时指定的模式,也叫悲观锁(模式),然而,悲观锁是为了弥补read-committed 机制的不足,从而解决non-repeatable (不可重复读)和 phantom-read (幻读)问题 ,而non-repeatable 和 phantom-read 这两个问题也只是事务并发是产生的两种问题...
我们知道,事务由那几个特性,四个(ACID):
1.原子性(Atomicity):
2.一致性(Consistency)
3.隔离性(Isolation)
4.持久性(Durability)
一个支持事务(Transaction)的数据库系统,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。
A. 只要数据库支持事务,就不可能出现第一类丢失更新
B. read-uncommitted(允许读取未提交的数据)会出现dirty read , phantom-read,non-repeatable read 问题
C. read-committed(读取已提交的数据 ,项目中一般使用这个,MySql 数据库默认是这种机制)不会出现dirty read ,因为只有另一个事务提交才会读出来结果,但仍然会出现non-repeatable和phantom-read
(所以使用read-committed 机制可用悲观锁和乐观锁来解决non-repeatable 和 phantom-read 问题)
D.
E. serializable 解决事务隔离级别(顺序执行事务,不并发,实际当中很少使用)
悲观锁
乐观锁
LockMode类表示的几种锁定模式
锁定模式
描述
LockMode.NONE
如果缓存中存在对象,直接返回该对象的引用,否则通过select语句到数据库中加载该对象,默认值.
LockMode.READ
不管缓存中是否存在对象,总是通过select语句到数据库中加载该对象,如果映射文件中设置了版本元素,就执行版本检查,比较缓存中的对象是否和数据库中对象版本一致
LockMode.UPGRADE
不管缓存中是否存在对象,总是通过select语句到数据库中加载该对象,如果映射文件中设置了版本元素,就执行版本检查,比较缓存中的对象是否和数据库中对象的版本一致,如果数据库系统支持悲观锁(如Oracle/MySQL),就执行select...for update语句,如果不支持(如Sybase),执行普通select语句
LockMode.UPGRADE_NOWAIT
和LockMode.UPGRADE具有同样功能,此外,对于Oracle等支持update nowait的数据库,执行select...for update nowait语句,nowait表明如果执行该select语句的事务不能立即获得悲观锁,那么不会等待其它事务释放锁,而是立刻抛出锁定异常
LockMode.WRITE
保存对象时会自动使用这种锁定模式,仅供Hibernate内部使用,应用程序中不应该使用它
LockMode.FORCE
强制更新数据库中对象的版本属性,从而表明当前事务已经更新了这个对象
多个事务并发运行时的并发问题
第一类丢失更新:撤销一个事务时,把其它事务已提交的更新数据覆盖.
第二类丢失更新:不可重复读中的特例,一个事务覆盖另一事务已提交的更新数据.
脏读:一个事务读到另一事务未提交的更新数据.
幻读:一个事务读到另一事务已提交的新插入的数据.
不可重复读:一个事务读到另一个事物已提交的更新数据.
锁的类型和兼容性
共享锁
l
l
l
l
独占锁
l
l
l
l
更新锁
l
l
l
l
各种隔离级别所能避免的并发问题
隔离级别
是否出现第一类丢失更新
是否出现第二类丢失更新
是否出现脏读
是否出现幻读
是否出现不可重复读
Serializable串行化
RepeatableRead可重复读
ReadCommited读已提交数据
ReadUncommited读未提交数据
- Hibernate的LockMode
- Hibernate 的 LockMode
- Hibernate的LockMode
- Hibernate的LockMode
- Hibernate的LockMode
- Hibernate--LockMode
- hibernate lockmode
- Hibernate的LockMode(悲观锁和乐观锁)
- Hibernate的LockMode(悲观锁和乐观锁)
- Hibernate的LockMode(悲观锁和乐观锁)
- Hibernate的LockMode(悲观锁和乐观锁)
- Hibernate的LockMode(悲观锁和乐观锁)
- Hibernate的LockMode(悲观锁和乐观锁)
- Hibernate的LockMode(悲观锁和乐观锁)
- Hibernate的悲观锁并发控制机制及LockMode
- Hibernate的LockMode(悲观锁和乐观锁)
- LockMode
- 无法解析类型 net.sf.hibernate.LockMode。从必需的 .class 文件间接引用了它
- 【linxu笔记】redhat6.4 Server更换yum,便于安装软件
- Java for Web学习笔记(九八):持久化初探(3)JPA小例子(上)
- 换种思路实现RecyclerView嵌套RecyclerView(购物车)复杂效果
- 关于c++中vector的使用
- -精通正则表达式-第三版-第2章笔记
- Hibernate的LockMode
- 【NOIP2017】跳房子
- VS 中常见问题汇总
- 1040. 有几个PAT 当是三个字母组成的可能的时候 用检查到A的时候 A前面P的数量 和A后面 T的数量求组合可能
- [ENVI] 分类后处理
- C#学习笔记——结构体
- macOS: 初探本地资源库中的Security.plist文件的用途
- 利用Gson 是序列化Json可以自定义key值的几种方案
- Unity3d easytouch计算摇杆旋转角度以及摇杆八方向控制角色