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

Spring Boot 3与Hibernate 6迁移报错:datetime2转DATETIMEOFFSET不支持

解决Spring Boot 3+Hibernate 6访问SQL Server 2016 Instant类型字段的转换错误

这个问题核心是Hibernate 6.x对Instant类型的默认JDBC映射规则发生了变更:旧版本默认把Instant映射为SQL Server的datetime2,但Hibernate 6默认会将其映射成datetimeoffset。而你的数据库字段是datetime2类型,SQL Server JDBC驱动不支持自动从datetime2转换为datetimeoffset,因此触发了该报错。

以下是几个可行的解决办法:

方法1:全局配置Hibernate将Instant映射为datetime2

在application.properties或application.yml中添加全局配置,强制Hibernate对Instant类型使用datetime2的JDBC类型:

spring.jpa.properties.hibernate.type.preferred_instant_jdbc_type=datetime2

该方案无需修改实体类代码,适合需要全局统一处理的场景。

方法2:针对实体类字段指定映射类型

如果仅需调整特定字段的映射规则,在对应的Instant字段上添加注解明确指定JDBC类型:

import org.hibernate.type.SqlTypes;
import jakarta.persistence.Column;
import org.hibernate.annotations.JdbcTypeCode;

// 实体类中对应的字段
@Column(columnDefinition = "datetime2")
@JdbcTypeCode(SqlTypes.DATETIME2)
private Instant createTime;

方法3:修改数据库字段类型为datetimeoffset

如果业务允许,直接将数据库中对应字段的类型从datetime2修改为datetimeoffset,这样就能和Hibernate 6的默认映射规则匹配,无需修改任何代码。

另外建议确认mssql-jdbc驱动版本在11.2以上,避免驱动本身的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:01:26