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

r6l8ljro  于 2022-11-30  发布在  其他
关注(0)|答案(2)|浏览(137)

我将我的Sping 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.

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

cotxawn7

cotxawn71#

Hibernate 6更改了即时日期类型的存储方式。
Instant现在默认情况下Map到类型代码SqlType.TIMESTAMP_UTC,该代码Map到SQL类型时间戳(如果可能的话)和时区,并福尔斯退到时间戳。由于此更改,某些数据库上可能会出现架构验证错误。
迁移到带时区的时间戳可能需要使用cast(旧的时间戳带时区)之类的迁移表达式。要保持向后兼容性,请将设置hib. type.preferred_instant_jdbc_type配置为TIMESTAMP。
Hibernate 5以2020-08-03 14:54:40.0000000的格式存储Java Instant,Hibernate 6添加了时区,将成为2020-08-03 14:54:40.0000000 +00:00
我不是一个新实现爱好者,但是如果您想改变它,请在Sping Boot 中将下面的行添加到application.properties文件中
spring.jpa.properties.hibernate.type.preferred_instant_jdbc_type=TIMESTAMP
有关详细信息,请参阅Hibernate 6迁移指南。

lb3vh1jj

lb3vh1jj2#

在您升级版本之前,请检查其兼容性。Check here,如果您使用的是Sping Boot 3.0.0,最好使用Hibernate [3.x-4.2]。

相关问题