Hibernate中的悲观锁和乐观锁

@[TOC]Hibernate中的悲观锁和乐观锁

Hibernate中的悲观锁和乐观锁

用途:主要用来解决并发问题。锁是一种排他性的操作

悲观锁:对数据库的记录加锁,不支持懒加载.
实现策略:通常依赖于数据库机制,在整个过程中将数据锁定,其它任何用户都不能读取或修改,适合于短事物的操作.
加锁代码:

Inventory inv = (Inventory)session.load
(Inventory.class, 1, LockMode.UPGRADE);
//查询记录的时候顺便加了一个悲观锁
//由于悲观锁并不支持懒加载,所以一执行这个语句就会发送sql语句进行查询。
session.getTransaction().commit();//  commit之后自动解锁

乐观锁:通过更改版本号来实现。并不算是真正的锁,支持懒加载
乐观锁的并发性比较好,但是处理事物的操作不是很好.
实现策略:
乐观锁的使用策略:大多数基于数据版本记录机制(version)实现,一般是在数据库表中加入一个version字段,读取数据时将版本号一同读出,之后更新数据时版本号加一,如果提交数据时版本号小于数据表中的版本号,则认为数据是过期的,否则给予更新。
看代码:

//实体类代码
public class Inventory {
	private int itemNo;
	private String itemName;
	private int quantity;
	private int version;
 //这个属性一定要是整型,在hbm中定义由hibernate来控制。
//相应的hbm文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.bjsxt.hibernate.Inventory" table="t_inventory" 
 optimistic-lock="version">//表示乐观锁的版本号字段为version字段
		<id name="itemNo">
			<generator class="native"/>
		</id>
		<version name="version"/>//乐观锁字段
		<property name="itemName"/>
		<property name="quantity"/>
	</class>
</hibernate-mapping>
 使用:
 Inventory inv = (Inventory)session.load(Inventory.class, 1);
 直接使用即可,hibernate会自己根据版本号和id号加载对象,如果版本号中途被
 修改了,就会出异常。支持懒加载。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值