zoukankan      html  css  js  c++  java
  • Hibernate乐观锁与悲观锁

    悲观锁

    从加载对象就开始锁定。修改过程中一直是锁。直到commit()提交后再解锁。只需要在加载对象时加上(LockOptions.UPGRADE)即可,如下所示

    Info info=session.load(Info.class,"p003",LockOptions.UPGRADE);

    这样带来的问题就是,当访问量大的时候就会造成排队等待的后果。

    乐观锁

          相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。乐观锁机制在一定程度上解决了这个问题。乐观锁,大多是基于数据版本(Version)记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个"version"字段来实现。
      乐观锁的工作原理:读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

    配置如下:

    1.在表中加一个字段version
    2.在实体类中加一个属性version
    3.在映谢文件中配置<version name="version"> 位置 放在<id></id>下面

    代码不做改变。

    当没有在数据库中设置version字段时,该如何利用乐观锁原理进行机制实现呢? 如下所示:


    update info set name=?,sex=?,nation=?,birthday=? where code=? and name=? and sex=? and nation=? and birthday=?

    executeUpdate() int-更新的行数0----并发重突了

  • 相关阅读:
    【ORA-02049】超时分布式事务处理等待锁 解决方法
    Git使用出错:Couldn‘t reserve space for cygwin‘s heap, Win32
    JS身份证号码校验
    linux 下查看cpu位数 内核等参数命令(转)
    linux ps命令,查看进程cpu和内存占用率排序(转)
    JAVA图片验证码
    JAVA BigDecimal 小数点处理
    Linux命令大全
    Eclipse Java注释模板设置详解
    JSONArray的应用
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6538613.html
Copyright © 2011-2022 走看看