当前位置:   article > 正文

spring-data-mongodb的@version注解的后台实现逻辑简单解析.

mongo @version

model的某个属性上添加@version注解,系统每次保存会自动给该属性值加1,保证数据没有脏写入.但实际使用中,发现使用不当,会导致该检查频繁报错.简单分析@version字段的自增机制.

调用repo*的save方法.最终会调用org.springframework.data.mongodb.repository.support.SimpleMongoRepository类的save方法.

  1. public <S extends T> S save(S entity) {
  2. Assert.notNull(entity, "Entity must not be null!");
  3. //isNew方法实现写在下面了.
  4. if (entityInformation.isNew(entity)) {
  5. /*
  6. * insert对version的处理比较简单,直接判定是否存在version注解,存在则设置version对应字段为0
  7. */
  8. mongoOperations.insert(entity, entityInformation.getCollectionName());
  9. } else {
  10. mongoOperations.save(entity, entityInformation.getCollectionName());
  11. }
  12. return entity;
  13. }
  14. /** 判断一下主键的值是否存在,存在返回false,反正为true.所以这里的判断是不严谨的,通过前台给设置主键Id的,就会走save,而不是insert了.*/
  15. public boolean isNew(T entity) {
  16. ID id = getId(entity);
  17. Class<ID> idType = getIdType();
  18. if (!idType.isPrimitive()) {
  19. return id =
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/55985
推荐阅读
相关标签
  

闽ICP备14008679号