Hibernate 的锁机制

Hibernate 的锁机制说明:
     解决数据并发访问------锁
     乐观锁:
        hibernate通过应用程序来创建的锁,并不是数据库地层的锁.所谓乐观是对事务的并发访问数据的乐观态度(访问一个数据的时候,没有其他程序访问该数据.

 当更新的时候,会检查在使用数据的时候是否有程序对该数据进行更新,就放弃操作,否则,就进行更新)
 当用户使用数据的时候认为没有别人和自己进行并发访问;
 当使用完后,在进行数据更新的时候,会进行判断,如果
 在我使用这个数据的时候有别的人已经使用这个数据,就
 放弃已有操作,否则,则进行相关操作。
 hibernate 会帮助我们判断数据是否被别人使用。
 hibernate 通过版本对比的方式来完成判断的。.
 

例子:

 创建表:
 create table t_test(
      id integer primary key,
      name varchar2(12) not null,
      ver integer
 );
 

 xxx.hbm.xml 配置文件:


 <class neme="Test" table="t_test">
  <id name="id" type="java.lang.Integer(也可以用hibernate提供的中间的类型integer)">
   <generator class="increment"/>
  </id>
  <version name="version" column="ver" type="integer"/> //必须写在id和property之间,type值必须是java.lang.Integer类型。
  <property name="name" column="name" type="java.lang.String(也可string)"/>
 </class>


   悲观锁:对应数据库中的锁,当操作一条数据的时候,马上通过数据库为这条记录加锁,等使用完之后别的拥护才可以进行操作。效率低,串访问.
 
 如何加悲观锁:针对查询,其它操作,数据库会自动加锁。
 for update
 hibernate 加入悲观锁:
 1. session.get(Test.class,1,LockMode.UPGRADE);
     UPGRADE 在加锁时,已经有其他的程序先加锁,等待其他程序释放锁,然后加锁。
     UPGRADE_NOWAIT 在加锁时,已经有其他的程序先加锁,就不在等待,放弃。
 2. session.load(Test.class,1,LockMode.UPGRADE);
 
 3.Query query = session.createQuery("FROM Test as t");
 query.setLockMode("t",LockMode.UPGRADE);
 query.uniqueResult();
 
 区别:
 1。乐观锁:hibernate通过应用程序来创建的锁。并不是数据库地层的锁。特点:并发效率高,解决并发访问的能力差。
 2。悲观锁:对应数据库中的锁。特点:并发效率低,解决并发访问的能力强。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值