MySQL / Hibernate使用映射为LocalTime的列检索错误的数据

我正在将Hibernate(TIME)中MySQL数据库的5.4.6.Final列映射为java.time.LocalTime类。 这是映射到实体的声明:

@Column(name = "TIMEVAL")
public LocalTime TIMEVAL;

数据库中的列的值为00:30:00,但是休眠时它正在构建值为TIMEVAL的{​​{1}}实例。
我考虑过服务器和休眠连接之间的时区差异(忽略TIME数据类型没有时区的事实),但是我将每个连接和服务器都设置为UTC。
并通过执行查询:

01:30:00

休眠会话和服务器的结果均为SELECT @@global.time_zone; SELECT @@session.time_zone;
遵循Hibernate配置:

+00:00

这是MySQL的配置:

spring.jpa.properties.hibernate.jdbc.time_zone=UTC
spring.datasource.url=jdbc:mysql://localhost:3306/..?useUnicode=true&useJDBCCompliantTimezoneshift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&allowMultiQueries=true

我也尝试过:

  1. 将MySQL列指定为default-time-zone=+00:00 ,但是Hibernate总是检索VARCHAR(8)
  2. 将Entity数据类型更改为01:30:00,但是Hibernate抛出错误,说它无法将TIME映射到java.lang.Long。

要使Hibernate用数据库列的值构建Duration实例,我需要修改什么?

a946527083 回答:MySQL / Hibernate使用映射为LocalTime的列检索错误的数据

正如@Andreas在评论中指出的那样。 JVM时区不在UTC中。
我需要更改JVM时区以从数据库中获取正确的值。
因此,通过将以下参数添加到JVM选项中:

-Duser.timezone=UTC

最后,LocalTime实例是用00:30:00的值作为数据库列的值构建的。

本文链接:https://www.f2er.com/3129728.html

大家都在问