我将我的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
2条答案
按热度按时间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
的格式存储JavaInstant
,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迁移指南。
lb3vh1jj2#
在您升级版本之前,请检查其兼容性。Check here,如果您使用的是Sping Boot 3.0.0,最好使用Hibernate [3.x-4.2]。