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導致

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM