You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB新增时createdDate正常更新返回null,实现Persistable仍未解决

问题原因与解决方案

核心原因

@CreatedDate是Spring Data MongoDB的审计字段,仅会在判定实体为全新实例时自动填充值,更新操作默认不会维护该字段,你遇到的空值问题本质是更新操作时用null覆盖了数据库中原本的createdDate值。

具体解决方案

  • 首先确认项目配置类/启动类上已添加@EnableMongoAuditing注解,审计功能是所有自动日期填充的前提,新增时如果是手动赋值了createdDate会掩盖审计未开启的问题,更新时就会暴露空值异常。
  • 避免使用「新建实体对象→设置id和要更新的字段→直接调用save」的更新逻辑:该场景下新建对象的createdDate默认是null,Spring Data因为id不为空判定不是新实例,不会自动补全createdDate,会直接把null写入数据库覆盖原有值。
    正确操作流程:先通过id从数据库查询出完整的持久化对象,仅修改需要更新的字段后再调用save方法,此时查询得到的对象本身带有原有createdDate值,更新时不会被覆盖。
  • 你当前实体类使用了@SuperBuilder注解,如果更新时通过builder构造带id的实体,必须显式传入数据库中已有的createdDate值,否则builder生成的对象该字段默认是null,存入后会覆盖原值。
  • 如果使用MongoTemplate的updateFirst/updateMulti等方法做部分更新,构造Update对象时不要加入createdDate字段,仅设置需要更新的字段即可,不会修改原有createdDate的值。

内容的提问来源于stack exchange,提问作者yali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:57:00