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

Spring Boot中Redis键值对创建/更新日期字段为null问题

解决Spring Data Redis中@CreatedDate和@LastModifiedDate字段为null的问题

你遇到的问题是因为Spring Data Redis默认不会自动处理审计字段的填充,需要手动开启审计功能并配置相关组件,具体步骤如下:

1. 开启Redis审计功能

在你的Spring Boot启动类或者配置类上添加@EnableRedisAuditing注解,这会让Spring注册对应的审计监听器,负责在实体保存/更新时填充时间戳:

@SpringBootApplication
@EnableRedisAuditing
public class CartApplication {
    public static void main(String[] args) {
        SpringApplication.run(CartApplication.class, args);
    }
}

2. 确保实体类字段可写

你的Cart类已经添加了@Setter注解,这没问题——审计机制需要通过setter方法来设置时间字段值,所以要确保createdAt和modifiedAt有对应的setter方法。

3. (可选)自定义时间生成逻辑

如果需要自定义时间的生成方式(比如指定时区、使用LocalDateTime替代Date),可以配置DateTimeProvider Bean:

@Configuration
public class RedisAuditConfig {
    @Bean
    public DateTimeProvider dateTimeProvider() {
        // 这里可以根据需求返回自定义时间,比如带时区的LocalDateTime
        return () -> Optional.of(LocalDateTime.now(ZoneId.of("Asia/Shanghai")));
    }
}

如果还是想用Date类型,直接返回new Date()即可:

return () -> Optional.of(new Date());

4. 通过Spring Data Repository执行操作

必须使用Spring Data提供的Repository接口(比如CrudRepository<Cart, UUID>)来执行保存、更新操作,直接使用RedisTemplate操作不会触发审计字段的自动填充。示例Repository:

public interface CartRepository extends CrudRepository<Cart, UUID> {
}

关键说明

Spring Data Redis的审计机制和JPA不同,JPA默认会处理审计字段,但Redis需要显式开启@EnableRedisAuditing才能激活时间戳的自动填充逻辑。开启后,当你调用repository.save(cart)时:

  • 第一次保存(新增):createdAt和modifiedAt都会被设置为当前时间
  • 后续更新:只有modifiedAt会被更新为当前时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:30:10