Board logo

标题: java---spring mongo 乐观锁 [打印本页]

作者: look_w    时间: 2019-5-16 15:19     标题: java---spring mongo 乐观锁

情况

代码如下:

  MyLog myLog = mongoTemplate.find(new Query(Criteria.where("code").is("1234")))
        myLog.setRequestDate(new Date());
        mongoTemplate.save(myLog);



详细报错如下:

exception ERROR org.springframework.dao.OptimisticLockingFailureException: Optimistic lock exception on saving entity


原因

save具有update的效果,但是如果实体启用了versionEntity功能, 更新数据时要求version大于库中的version。

但是直接提取出来的数据 有可能 别人也在并发修改,导致 我们 存库时的version小于 库中的version。

详情可参考 Mongo DB乐观锁之version在spring data中应用
解决方案
手动处理version号再使用save

    if(myLog.getVersion()!=null) {
                myLog.setVersion(myLog.getVersion()+1);
            }



不使用save,使用update

            Update update=new Update();
            update.set("requestDate", new Date());
            dpUserMongoTemplate.updateFirst(new Query(Criteria.where("code").is(1234)),update , MyLog.class);




不使用save,使用insert

  MyLog myLog = mongoTemplate.find(new Query(Criteria.where("code").is("1234")))
        myLog.setRequestDate(new Date());
        mongoTemplate.insert(myLog);



需要注意的是 insert 方式 如果库中已经有 _id相同的数据 会报错,所以需要我们清楚执行操作的目的是 在原数据上更新,还是多一条记录入库。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0