Spring Boot 2.7.11+MariaDB中@Temporal(DATE)生成DATETIME的解决方法
解决MariaDB中JPA @Temporal(DATE)生成DATETIME的问题
问题原因
Spring Boot 2.7.11默认搭配的Hibernate版本,针对MariaDB的方言适配存在细节问题,导致@Temporal(DATE)注解没有正确映射到数据库的DATE类型,反而生成了带时间精度的DATETIME。
可行解决方案
1. 指定正确的MariaDB方言
在项目的配置文件(application.properties或application.yml)中显式配置Hibernate方言,匹配你的MariaDB版本:
- MariaDB 10.2及以上版本:使用
org.hibernate.dialect.MariaDB102Dialect - 更低版本MariaDB:使用
org.hibernate.dialect.MariaDBDialect
示例配置(application.properties):
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDB102Dialect
2. 用@Column强制指定列类型
如果方言配置后仍未生效,直接通过@Column注解的columnDefinition属性强制指定字段类型为DATE:
@Temporal(TemporalType.DATE) @Column(columnDefinition = "DATE") private java.util.Date endDate;
3. 切换到Java 8日期类型(推荐方案)
如果项目允许,建议将java.util.Date替换为Java 8的java.time.LocalDate,无需添加@Temporal注解,Hibernate会自动将其映射为MariaDB的DATE类型:
private LocalDate endDate;
额外注意
- 若使用自动建表(
spring.jpa.hibernate.ddl-auto设为update或create),修改配置后需确保表结构更新生效,必要时可临时将ddl-auto设为create重建表(操作前请备份数据)。 - 确认
mariadb-java-client驱动版本与Spring Boot 2.7.11适配,推荐使用2.7.x系列版本。
内容的提问来源于stack exchange,提问作者Rui
相关产品推荐
相关产品推荐

