JPA对接MySQL如何设置默认当前日期,CURRENT_DATE语法报错如何解决
报错根因
你遇到的语法报错是由于MySQL版本的默认值规则限制:
- MySQL 5.7及更低版本仅允许
TIMESTAMP、DATETIME类型直接使用CURRENT_TIMESTAMP作为默认值,不支持DATE类型直接使用CURRENT_DATE做默认值 - MySQL 8.0及以上版本支持表达式作为默认值,但需要将表达式用括号包裹,否则会触发语法解析错误
解决方案
- 方案1:使用JPA自带的自动填充注解(全版本通用,不依赖数据库默认值规则)
直接用Hibernate提供的@CreationTimestamp注解,实体持久化时会自动填充当前日期,无需配置数据库默认值:
@Column(name = "ddate") @CreationTimestamp private Date ddate;
如果使用JPA 2.2+的Java 8时间API,也可以对应将字段类型改为LocalDate,注解配置不变。
- 方案2:调整字段类型适配数据库规则
如果需要在数据库层面设置默认值,且可以接受用DATETIME存储日期时间,修改注解配置即可:
@Column(name = "ddate", columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP") private Date ddate;
- 方案3:适配MySQL 8.0+的DATE类型默认值规则
如果你使用的是MySQL 8.0及以上版本,只需要给默认值表达式加上括号即可解决语法报错:
@Column(name = "ddate", columnDefinition = "DATE DEFAULT (CURRENT_DATE)") private Date ddate;
内容的提问来源于stack exchange,提问作者Jhon
相关产品推荐
相关产品推荐

