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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值