标题:
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