我正在将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
我也尝试过:
- 将MySQL列指定为
default-time-zone=+00:00
,但是Hibernate总是检索VARCHAR(8)
; - 将Entity数据类型更改为
01:30:00
,但是Hibernate抛出错误,说它无法将TIME映射到java.lang.Long。
要使Hibernate用数据库列的值构建Duration
实例,我需要修改什么?