Spring Boot 3 和 Hibernate 6 迁移错误:不支持从 datetime2 到 DATETIMEOFFSET 的转换

Jad*_*dda 2 java hibernate spring-boot hibernate-6.x

我将 Spring Boot 项目升级到 Spring Boot 3.0.0 和 Hibernate 6.x。应用程序启动时没有任何错误,当我访问任何具有Instant日期类型的表信息时,出现以下错误

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The conversion from datetime2 to DATETIMEOFFSET is unsupported.

Run Code Online (Sandbox Code Playgroud)

我正在使用 SQL Server 2016 和 Spring Data 3.0.0

Jad*_*dda 8

Hibernate 6 改变了即时日期类型的存储方式。

Instant 现在默认映射到类型代码 SqlType.TIMESTAMP_UTC,如果可能的话映射到带有时区的 SQL 类型时间戳,并回退到时间戳。由于此更改,某些数据库上可能会出现架构验证错误。

迁移到带有时区的时间戳可能需要像cast(old as timestamp with time zone)这样的迁移表达式。要保留向后兼容性,请将设置 hibernate.type.preferred_instant_jdbc_type 配置为 TIMESTAMP。

InstantHibernate 5以以下格式存储 Java 2020-08-03 14:54:40.0000000,Hibernate 6 添加了 Timezone,这将成为2020-08-03 14:54:40.0000000 +00:00

我不喜欢新的实现,但如果您想更改它,请将以下行添加到Spring Boot 中的application.properties文件中

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

有关详细信息,请参阅Hibernate 6 迁移指南