首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hibernate学习札记第18讲-悲观锁-乐观锁

2012-11-16 
hibernate学习笔记第18讲-悲观锁-乐观锁?Hibernate对悲观锁和乐观锁的支持,主要解决并发问题。数据库隔离级

hibernate学习笔记第18讲-悲观锁-乐观锁

?

Hibernate对悲观锁和乐观锁的支持,主要解决并发问题。

数据库隔离级别越高,并发性越差。

锁具有排他性,锁住别人就访问不了。

悲观锁:并发性低,悲观锁一般依赖于数据库机制实现的,在整个过程中将数据锁定,其他任何用户都不能读取或修改,hibernate做了一些封装。

一般适合短事务情况。

实际上是冲突检测。

悲观锁实现:

??????????????????????????? session.beginTransaction();

// LockMode 锁模式

??????????????????????????? Inventory inv =(Inventory)session.load(Inventory.class, 1, LockMode.UPGRADE);

??????????????????????????? System.out.println("itemName="+ inv.getItemName());

??????????????????????????? System.out.println("quantity="+ inv.getQuantity());

??????????????????????????? inv.setQuantity(inv.getQuantity()- 200);

??????????????????????????? session.update(inv);

??????????????????????????? session.getTransaction().commit();

?

乐观锁:并发性好,使用的比较多,

一般采用数据版本记录机制(version)实现,在数据库中加一个version字段,类似cvs管理,通过版本号来管理。版本低的不允许更新数据。每更新一次版本号会跟着变化。

还可以采用时间戳方式管理乐观锁。

乐观锁实现:

publicclass Inventory {

?

???????? private int itemNo;

????????

???????? private String itemName;

????????

???????? private int quantity;

????????

???????? private int version;

…….

}

映射关系:

<hibernate-mapping>

<classname="com.bjsxt.hibernate.Inventory" table="t_inventory" optimistic-lock="version">

????????????? <id name="itemNo">

?????????????????????? <generatorstyle="margin-left: 10.5pt; text-align: left;">????????????? </id>

//必须放到id后面

????????????? <version name="version"/>

????????????? <propertyname="itemName"/>

????????????? <propertyname="quantity"/>

???? </class>

</hibernate-mapping>

热点排行