zoukankan      html  css  js  c++  java
  • mongo的findAndModify方法使用误操作记录

    项目中标注页面,保存结果的修改,保存历史出现一个问题:版本号出现一样的

    原实现逻辑:

    没有结果记录,保存结果;有结果记录,修改结果记录,版本version + 1

    使用了findAndModify进行:update.inc("version", 1)

    代码如下


    查询结果:Result result = xxx;
    if (null != result) {
      result = resultRepository.updateResult(result.getVersion(), userTaskFile, param);
    }
    // 保存历史
    handleResultHistory(result, param.getSaveType());

    public Result updateResult(Integer version, UserTaskFile userTaskFile, ResultSaveParam param) {
    Query query = new Query();
    query.addCriteria(Criteria.where("userTaskId").is(userTaskFile.getUserTaskId())
    .and("userTaskFileId").is(userTaskFile.get_id())
    .and("deleted").is(false)
    .and("version").is(version));
    Update update = new Update();
    update.set("finalResult", param.getResult());
    update.inc("version", 1);
    update.set("stamp", param.getStamp());
    update.set("updateTime", new Date());
    return resultMongoTemplate.findAndModify(query, update, Result.class, userTaskFile.getTaskId());
    }
    问题现象:历史记录不是我修改后的结果
    原因排查:
    findAndModify方法返回的对象不是我保存的对象,如果想执行更新的对象,需使用:new FindAndModifyOptions().returnNew(true)
    return resultMongoTemplate.findAndModify(query, update, new FindAndModifyOptions().returnNew(true), Result.class, userTaskFile.getTaskId());

    修改完之后问题解决。

    版本号的问题也是因此产生的,取的不是最新的version导致

  • 相关阅读:
    VS2013 连接 MySQL
    2014年下半年的目标
    BI开发之——Mdx基础语法(2)(转至指尖流淌)
    BI开发之——Mdx基础语法(转至指尖流淌)
    数据仓库构建
    数据仓库的定义
    2014年计划:
    [转载]商业智能的三个层次
    BI入门基础知识-1
    ASP.NET MVC4 异常拦截
  • 原文地址:https://www.cnblogs.com/mabiao008/p/13409674.html
Copyright © 2011-2022 走看看