DJ(Delphi/JAVA)_fans的专栏

珍惜眼前、抓住机会、奋力拼搏、营造未来

Hibernate的锁机制

Hibernate 的锁机制:

悲观锁(Pessimistic Locking):

       悲观锁往往通过数据库机制来实现,适合于安全性要求高并发不高的系统,具有绝对的排它性。在Hibernate中的方式较多,但是都是最终实现的结果就是在组装后的SQL语句的尾部追加“for update”或者“for update nowait(oracle数据库特有)”。注意:只有在查询开始之前(也就是Hiberate 生成SQL 之前)设定加锁,才会真正通过数据库的锁机制进行加锁处理,否则,数据已经通过不包含for update子句的Select SQL加载进来,所谓数据库加锁也就无从谈起。

      

乐观锁(Optimistic Locking):

       乐观锁通过Hibernate自身的机制来实现,适合于并发高的系统,可能通过其它的系统或者直接修改数据库破坏数据。有多种实现方式,其中官方推荐的是version,因为它是目前唯一数据对象脱离session发生改变的情况下依然有效的锁机制。通过在数据库中增加version字段,一般为Integer型,同时在hbm文件中增加以下“红色文字”的部分。通过在读取数据和提交修改时读取和比较version字段的值,来决定提交的数据是否是脏数据,是否将修改更新到数据库中。注意:version 节点必须出现在id节点之后。

<hibernate-mapping>

<class

name="org.hibernate.sample.TUser"

table="t_user"

dynamic-update="true"

dynamic-insert="true"

optimistic-lock="version"

>

<id

name="id"

column="id"

type="java.lang.Integer"

>

<generator class="native">

</generator>

</id>

<version

column="version"

name="version"

type="java.lang.Integer"

/>

……

</class>

</hibernate-mapping>

 

阅读更多
个人分类: JAVA
想对作者说点什么? 我来说一句

Hibernate锁机制_悲观锁和乐观锁

2012年03月14日 20KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭