項目中標注頁面,保存結果的修改,保存歷史出現一個問題:版本號出現一樣的
原實現邏輯:
沒有結果記錄,保存結果;有結果記錄,修改結果記錄,版本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導致