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

Spring @CreatedDate配合Liquibase自动赋值失效问题求助

解决Spring Data @CreatedDate/@LastModifiedDate自动赋值失效问题

核心结论

仅靠@CreatedDate、@LastModifiedDate注解本身无法触发自动赋值——这些注解只是标记需要审计的字段,Spring Data JPA必须配合额外配置才能启动审计机制,监听实体生命周期事件并完成字段赋值。

具体配置步骤

  1. 开启全局JPA审计功能
    在Spring Boot启动类(或专门的配置类)上添加@EnableJpaAuditing注解,这是激活审计机制的核心开关:
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableJpaAuditing
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}
  1. 为实体绑定审计监听器
    在你的实体类上添加@EntityListeners(AuditingEntityListener.class)注解,让Spring的审计监听器监听该实体的创建、更新事件,自动为标记字段赋值:
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.Id;

@Entity
@EntityListeners(AuditingEntityListener.class)
public class YourEntity {
    @Id
    // 你的ID生成策略
    private Long id;

    @CreatedDate
    private Instant createdDate;

    @LastModifiedDate
    private Instant lastModifiedDate;

    // 其他字段及getter/setter
}

为什么Liquibase执行时能赋值?

Liquibase是直接通过SQL脚本操作数据库,要么是你在变更集中手动指定了日期值,要么是给数据库字段设置了默认值(比如DEFAULT CURRENT_TIMESTAMP),这和Spring Data的审计机制完全无关。而通过接口创建实体走的是JPA的持久化流程,必须依赖审计机制才能触发注解的自动赋值逻辑。

关于文档的误解

你提到的“基于注解的审计元数据”是指用@CreatedDate这类注解标记审计字段,但这只是审计机制的一部分——还需要通过@EnableJpaAuditing开启全局功能,再通过@EntityListeners将监听器绑定到实体上,整套审计流程才能正常工作,单独添加字段注解不会触发自动赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:05:07