spring boot配置的hibernate.jdbc.time_zone属性在spring版本3.2.1中不起作用

问题描述 投票:0回答:1

我的Spring应用程序时区是UTC,对应于以下配置:

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

我的 hibernate JDBC 时区在 spring boot 的 application.yaml 中配置为亚洲/德黑兰:

spring.jpa.properties.hibernate.jdbc.time_zone = Asia/Tehran

在升级到新版本的 Spring 之前,一切正常。 当我使用 spring 存储库存储日期字段时,日期存储在本地时区(亚洲/德黑兰)中。 示例代码:

basketEntity.setModifiedDateTime(ZonedDateTime.now());
basketRepository.save(basketEntity);

在上面的代码中,ZonedDateTime.now() 是 GMT 时间,因为应用程序时区和休眠将其转换为本地时区。

但是在将 spring boot 从版本 3.0.4 升级到 3.2.1 并相应地将 hibernate ORM 版本从 6.1.7.Final 升级到 6.4.1.Final 后,所有日期都存储在 GMT 上,并且显然

hibernate.jdbc.time_zone
配置无法按我的预期工作不再了。 我已确认在 Spring Boot 启动日志中应用了 Hibernate 时区配置。

请注意,我在实体中的日期字段如下所示:

@Column(name = "modified_date_time", insertable = false, columnDefinition = "datetime2")
private ZonedDateTime modifiedDateTime;

我的数据库是 SQL Server 2019,数据库中的日期字段类型是 datetime2

我存储在数据库中的日期字段数据的示例:

2024-01-09 10:52:31.6832713

附注 似乎 JVM 覆盖了最新版本的 hibernate 中 jdbc 配置的时区行为。

(我点击此链接进行应用程序设置) Hibernate 检索 UTC 时间戳

spring-boot hibernate jdbc spring-data-jpa spring-data
1个回答
0
投票

我通过在新版本的配置中设置新字段解决了问题:

hibernate.timezone.default_storage
设置为
NORMALIZE

我在hibernate的迁移指南中找到了解决方案:

在此输入链接描述

© www.soinside.com 2019 - 2024. All rights reserved.