Hibernate的锁

原创 2004年09月19日 23:23:00

Hibernate的加锁模式有:
Ø LockMode.NONE : 无锁机制。
Ø LockMode.WRITE :Hibernate在Insert和Update记录的时候会自动
获取。
Ø LockMode.READ : Hibernate在读取记录的时候会自动获取。
以上这三种锁机制一般由Hibernate内部使用,如Hibernate为了保证Update
过程中对象不会被外界修改,会在save方法实现中自动为目标对象加上WRITE锁。
Ø LockMode.UPGRADE :利用数据库的for update子句加锁。
Ø LockMode. UPGRADE_NOWAIT :Oracle的特定实现,利用Oracle的for
update nowait子句实现加锁。
上面这两种锁机制是我们在应用层较为常用的,加锁一般通过以下方法实现:
Criteria.setLockMode
Query.setLockMode
Session.lock
注意,只有在查询开始之前(也就是Hiberate 生成SQL 之前)设定加锁,才会
真正通过数据库的锁机制进行加锁处理,否则,数据已经通过不包含for update
子句的Select SQL加载进来,所谓数据库加锁也就无从谈起。

 

 

Hibernate 在其数据访问引擎中内置了乐观锁实现。如果不用考虑外部系统对数
据库的更新操作,利用Hibernate提供的透明化乐观锁实现,将大大提升我们的
生产力。
Hibernate中可以通过class描述符的optimistic-lock属性结合version
描述符指定。
现在,我们为之前示例中的TUser加上乐观锁机制。
Hibernate Developer’s Guide Version 1.0
September 2, 2004 So many open source projects. Why not Open your Documents?
1. 首先为TUser的class描述符添加optimistic-lock属性:

name="org.hibernate.sample.TUser"
table="t_user"
dynamic-update="true"
dynamic-insert="true"
optimistic-lock="version"
>
……

optimistic-lock属性有如下可选取值:
Ø none
无乐观锁
Ø version
通过版本机制实现乐观锁
Ø dirty
通过检查发生变动过的属性实现乐观锁
Ø all
通过检查所有属性实现乐观锁
其中通过version实现的乐观锁机制是Hibernate官方推荐的乐观锁实现,同时也
是Hibernate中,目前唯一在数据对象脱离Session发生修改的情况下依然有效的锁机
制。因此,一般情况下,我们都选择version方式作为Hibernate乐观锁实现机制。

我们如何使用Hibernate的锁(悲观锁)

厚积薄发!!!
  • hushanfeng110
  • hushanfeng110
  • 2015年12月01日 19:30
  • 2297

【hibernate框架】使用hibernate实现悲观锁和乐观锁

四种隔离机制不要忘记:(1,2,4,8) 1.read-uncommitted:能够去读那些没有提交的数据(允许脏读的存在) 2.read-committed:不会出现脏读,因为只有另一个事务提交才会...
  • u013517797
  • u013517797
  • 2015年03月10日 15:48
  • 2716

细谈Hibernate之悲观锁和乐观锁解决hibernate并发

锁( locking),这个概念在我们学习多线程的时候曾经接触过,其实这里的锁和多线程里面处理并发的锁是一个道理,都是暴力的把资源归为自己所有。这里我们用到锁的目的就是通过一些机制来保证一些数据在某个...
  • qq_27376871
  • qq_27376871
  • 2016年06月06日 17:01
  • 7028

Hibernate乐观锁的实现原理剖析与使用乐观锁时的注意点

Hibernate支持乐观锁。当多个事务同时对数据库表中的同一条数据操作时,如果没有加锁机制的话,就会产生脏数据(duty data)。Hibernate有2种机制可以解决这个问题:乐观锁和悲观锁。这...
  • z69183787
  • z69183787
  • 2014年04月02日 19:30
  • 1083

hibernate使用version实现乐观锁

乐观锁的作用  乐观锁的主要作用是为了解决事务并发带来的问题。相对于悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。 悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的...
  • cxn945
  • cxn945
  • 2015年06月24日 14:51
  • 922

hibernate乐观锁例子

1.在数据表中新建一个version字段,可以是int或者是bigint 2.在javabean中增加个version字段 package net.spring.model; impor...
  • kouwoo
  • kouwoo
  • 2015年12月24日 13:54
  • 1593

hibernate4性能之并发和锁机制

数据库事务的定义 数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性...
  • crazyitlhs
  • crazyitlhs
  • 2015年10月27日 12:01
  • 3505

Hibernate(五)——面向对象查询语言和锁

Hibernate做了数据库中表和我们实体类的映射,使我们不必再编写sql语言了。但是有时候查询的特殊性,还是需要我们手动来写查询语句呢,Hibernate框架为了解决这个问题给我们提供了HQL(Hi...
  • liujiahan629629
  • liujiahan629629
  • 2014年03月19日 22:41
  • 5715

Hibernate锁机制的简单理解

我们知道事务并发会引发一些问题,一个典型的例子就是银行存取款的问题: 比如一个账户,用户A和B同时对它操作。假设账户里有1000元,A要往里存100元,而B要取100元, 假设这两个事务同...
  • z69183787
  • z69183787
  • 2014年04月02日 19:22
  • 620

从事务隔离级别谈到Hibernate乐观锁,悲观锁

先提一下基础知识,数据库事务的4个基本特性: 1.Atomic(原子性) 事务中包含的操作被看成一个逻辑单元,这个单元要么全部完成,要么全部没做。 2.Consistency(一致性) 隔离执行事务时...
  • kk791159796
  • kk791159796
  • 2013年11月20日 21:27
  • 7171
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate的锁
举报原因:
原因补充:

(最多只允许输入30个字)