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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:48:14