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

用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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)