• 如何利用hibernate3解决数据库丢失更新问题?


    首先我们要明白什么叫丢失更新。

    比如数据库有一个person表,里面有一条这样的数据 "5 zhangsan shenzhen";

    现在有两个事务A、B同时查找了这一条记录;

    A事务修改记录为"5 zhangsan beijing";

    提交事务

    B事务修改记录为"5 lisi shenzhen";

    这时候B事务再去提交或者回滚数据就会出现覆盖A事务已经修改的内容,这种情况就叫做丢失更新。

    hibernate3中的解决方法:利用悲观锁、乐观锁

    悲观锁:底层原理就是利用了数据库中的for update;

        当数据库中select SQL语句上带有for update时,A事务能够查到信息,B在去查的时候就查不到信息,只有当A事务提交事务之后才能查到数据。

        在hibernate3中在获取数据时有提供get(Class arg0,Serializable arg1,LockMode arg3)方法,可以在获取数据时给定一个LockMode参数(LockMode.UPGRADE)

        一般不用,一般用乐观锁解决

    乐观锁:

      1.在实体类添加一个属性字段,假如名字叫ver,名字可以随意起,并提供getset方法

      2.在对应的映射文件中添加<version name="ver"/>

      其它就照常写就行了,在hibernate提交事务时发送的sql是这样子

      update .... set ver=? .... where .... and version=?

      意思是说在提交事务的时候,hibernate框架会自动检查两次的ver字段是否一致,如果不一致就不让进行更新,如果一致就进行更新

  • 相关阅读:
    NSIndexPath 延伸
    iOS进阶推荐的书目
    配置App真机测试证书的流程 一览
    NSAttributedString 的21种属性 详解
    KVO & 通知 小记
    贝塞尔曲线 & CAShapeLayer & Stroke 动画 浅谈
    提升开发人员修为的探讨
    热门IOS 第三方库
    drawRect & 内存 -> 深究
    CALayer & UIView 关系浅析
  • 原文地址:https://www.cnblogs.com/zyh1994/p/5493141.html
Copyright © 2020-2023  润新知