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

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

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

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

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

一般适合短事务情况。

实际上是冲突检测。

悲观锁实现:

                            session.beginTransaction();

// LockMode 锁模式

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

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

                            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">

                       <generatorclass="native"/>

              </id>

//必须放到id后面

              <version name="version"/>

              <propertyname="itemName"/>

              <propertyname="quantity"/>

     </class>

</hibernate-mapping>

相关推荐