@CreationTimestamp不生效,data.sql插入报created_date无默认值如何解决
生效JPA自动填充创建时间的配置
若使用Hibernate原生@CreationTimestamp注解
确保字段上的注解引入的是org.hibernate.annotations.CreationTimestamp包下的实现,无需额外配置,调用JPA的save()方法插入数据时会自动填充当前时间。
若使用Spring Data JPA审计注解@CreatedDate
需要完成3项配置:
- 项目启动类添加
@EnableJpaAuditing注解,开启JPA审计功能 - User实体类顶部添加
@EntityListeners(AuditingEntityListener.class)注解,绑定审计监听器 createdDate字段上添加@CreatedDate注解
解决data.sql执行报错问题
data.sql是Spring Boot启动阶段直接执行的原生SQL,不会经过Hibernate的实体处理逻辑,所以@CreationTimestamp注解对这类SQL不生效,可选择以下任意一种方案解决:
- 方案1:修改插入语句,手动传入创建时间
INSERT INTO users(email,enabled,password,username,provider,created_date) VALUES('abc@gmail.com',1,'$2a$10$ideoxDhZo1MP9eW.A4UC0.4iPeDeCNM9yVMGQFpzTz04OZp9nxw5S','username','local',NOW());
- 方案2:给数据库字段设置默认值,修改
createdDate的@Column配置,让Hibernate自动建表时添加默认值规则
@CreationTimestamp @Column(nullable = false, updatable = false, columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP") private Date createdDate;
配置后即使插入语句不传入created_date字段,数据库也会自动填充当前时间作为默认值。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

