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

使用spring-data-elasticsearch更新实体时LastModifiedDate未更新问题

问题原因
  1. Spring Data Elasticsearch的审计注解@LastModifiedDate、@CreatedDate等,仅在调用框架提供的save()/saveAll()类方法(包括Repository的save方法、ElasticsearchOperations的save方法)操作完整实体对象时才会触发,审计切面会在这类方法执行时自动填充/更新审计字段。
  2. 你当前使用的是ElasticsearchOperations.update()方法,直接传入自定义的Document对象执行部分字段更新,该流程不会触发审计切面逻辑,框架不会自动处理@LastModifiedDate标注的字段,因此修改时间不会自动更新。
  3. 额外前置检查:若你在使用save方法时审计也不生效,需确认配置类上已添加@EnableElasticsearchAuditing注解开启审计功能,同时实体类上已标注@Auditable注解。
解决方案
  • 方案一:走完整实体更新流程,自动触发审计
    先根据id查询出完整的实体对象,修改需要更新的属性后,调用repository.save(实体)或者operations.save(实体)方法执行更新,此时框架会自动更新modifiedDate字段。适合更新字段较少、不需要极致性能的场景。
  • 方案二:部分更新时手动填充修改时间
    如果你需要保留当前的部分更新逻辑来避免查询全量实体的开销,直接在构建Document对象时手动添加修改时间字段即可:
    document.put("modified_dt", Instant.now());
    
    无需修改其他更新逻辑,即可实现修改时间同步更新。
  • 方案三:使用更新脚本赋值
    构建UpdateQuery时指定更新脚本,在脚本中给modified_dt字段赋值当前时间,适合批量更新等特殊场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 18:27:03