hibernate--悲观锁-乐观锁的并发问题

首先要知道以下的注意点:

1 更新丢失的问题:

   用两个testCase一起运行模拟多线程并发
    两个线程同时修改一个对象 会产生更新丢失的问题
    慢的那个保留了以前的东西
     使得快的修改的东西没有作用

2 解决办法解决并发问题:

         1 悲观锁 (一般不用 )
         *   是Hibernate基于数据库的机制来实现的,此时hibernate3和4所实现的机制是不一样的
         *   hibernate3是基于同步的机制实现的(类似Java锁 必须等第一个结束 其他的在排队 效率很低)
         *   hibernate4若是两个同时修改 那么会抛出异常
         * 2 乐观锁
         *  在数据库中增加一个version的字段来实现的,每一次修改都会让这个字段的数字+1,
         *  在读取的时候 会根据version这个版本的数据来读取
         *  这样如果并发修改就会抛异常 只要提示再次重新更新就可以 正常

3 使用悲观锁的方法:

//加使用了UPGRADE就加上了锁(悲观)
            Student stu=(Student)session.load(Student.class,1,LockOptions.UPGRADE);
4乐观锁的使用方法:

         在类中 和xml文件中添加字段version 并不使用悲观锁
         * 更新一次 数据库中的version字段值就+1
         * 当慢的那个线程在更新时 发现自己之前获取的version值和 现在数据库中的不一样(已经更新)
         * 那么就会抛异常 停止更新
         * org.hibernate.StaleObjectStateException: 
         * Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
         * 注意:version 一定要加在ID后面 property前面
         * 我们只要让慢的重新更新就可以(service重新调用即可(抛出对应异常的话))

Student.java

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值