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日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装