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管理,通过版本号来管理。版本低的不允许更新数据。每更新一次版本号会跟着变化。

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

乐观锁实现:

public class Inventory {

 

         private int itemNo;

        

         private String itemName;

        

         private int quantity;

        

         private int version;

…….

}

映射关系:

<hibernate-mapping>

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

              <id name="itemNo">

                       <generator class="native"/>

              </id>

//必须放到id后面

              <version name="version"/>

              <property name="itemName"/>

              <property name="quantity"/>

     </class>

</hibernate-mapping>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值