kiyokiwa 2021-08-18 15:05 采纳率: 81.8%
浏览 437
已结题

用mongoTemplate更新一个属性较多的实体类,如何避免写重复的条件,判断是否使用update方法去更新该字段?

(此描述是在java的springboot的环境下)就是在我更新一个会员对象时,会员的属性大概有20多个,添加会员的时候只要使用mongoTemplate的insert方法就能一次性插入。但是在更新操作的时候,可能只修改某几个字段,如果直接更新全部对象的话,前端传来的数据除了需要修改的字段,其他字段都为null,这时候数据库中就会造成文档数据的丢失,例如(会员user:属性有name和age)我只修改name属性为”李四“,age前端不传(也就是null),那么update的话,修改数据库数据就是name=李四 和age =null,这种情况。

于是我相出了一个最笨的方法,那就是去判断每个属性是否为null,这样能解决问题,但是会造成代码复杂,光属性就二三十。一大串。不知道怎么修改,希望解答,谢谢。

  • 写回答

1条回答 默认 最新

  • 一枚小爪哇 2021-08-18 16:57
    关注

    建议修改的时候前端把值全部传到后端,那样后端就不用判断哪些字段为空了,如果使用update,也是需要知道修改了哪个字段,并且这个字段不为空,也是需要判断的,所以还不如使用save,需要前端把所有入参值都传到后端,
    update修改某个字段

      @Transactional(rollbackFor = Exception.class)
        public void updateUser(String id, User user) {
            Criteria criteria = Criteria.where("id").is(id);
            Query query = Query.query(criteria);
            Update update = new Update();
            // 修改特定字段
            update.set("phone", user.getPhone());
            update.set("username", user.getUsername());
    
            mongoTemplate.updateFirst(query, update, AuditDocSynonymGrpPoJo.class);
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月26日
  • 已采纳回答 8月18日
  • 创建了问题 8月18日

悬赏问题

  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥30 求解达问题(有红包)