hibernate实现乐观锁的方法

1、使用version或者timestamp(推荐version,因为timestamp只能精确到秒,且必须保证数据库服务器的时间和应用程序的时间一致)。

2、如果APP是基于已有的数据库,而数据库表中不包含代表版本或时间戳的字段,hibernate提供了其他实现乐观锁的方法,把<class>元素的optimistic-lock属性设为"all":

<class name="Student" table="table" optimistic-lock="all" dynamic-update="true">
注意:如果把<class>元素的optimistic-lock属性设为all,或者"dirty",必须同时把"dynamic-update"属性设为"true".

hibernate会在update语句的where子句中包含Monkey对象被加载时的所有属性:

update student set count=1000 where id=1 and name="杨潇" and count=1000;

如果把<class>元素的optimistic-lock属性设为"dirty",并且dynamic-update属性设为true,那么在update语句的where子句中仅包含ID字段及被更新过的属性;

update student set count=1001 where id=1 and count=1001;

第二种方法比较慢,而且只适用于在一个Session中加载了对象,然后又在同一个Session中修改了这个持久化对象的场合。WHY?因为如果不在同一个SESSION中的话,如何得知在数据库中的属性呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值