首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

java---spring mongo 乐观锁

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相同的数据 会报错,所以需要我们清楚执行操作的目的是 在原数据上更新,还是多一条记录入库。
返回列表