MySQL / Hibernate, извлекающий неправильные данные с помощью столбца, сопоставленного как LocalTime - PullRequest
0 голосов
/ 10 ноября 2019

Я отображаю столбец TIME базы данных MySQL в Hibernate (5.4.6.Final) как класс java.time.LocalTime. Это объявление преобразования в сущность:

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

Столбец в базе данных имеет значение 00:30:00, однако Hibernate создает экземпляр TIMEVAL со значением 01:30:00.
Я думал о разнице часовых поясов (игнорируя тот факт, что у типа данных TIME нет часового пояса) между сервером и подключением гибернации, но я настраивал каждое подключение и сервер как UTC.
И, выполнив запросы:

SELECT @@global.time_zone;
SELECT @@session.time_zone;

Результатом сеанса Hibernate и сервера были все +00:00.
После конфигурации Hibernate:

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

Я пробовал также:

  1. Указание столбца MySQL как VARCHAR(8), но Hibernate всегда получает 01:30:00;
  2. Изменение типа данных Entity на Duration, но Hibernate выдает ошибку, говоря, что не может сопоставить ВРЕМЯ с java.lang.Long.

Что мне нужноизменить, чтобы Hibernate создал экземпляр LocalTime со значением столбца базы данных?

1 Ответ

0 голосов
/ 10 ноября 2019

Как отметил @Andreas в комментариях. Часовой пояс JVM отсутствовал в UTC.
Мне нужно было изменить часовой пояс JVM, чтобы получить правильное значение из базы данных.
Итак, добавив следующий параметр в параметры JVM:

-Duser.timezone=UTC

Наконец, экземпляр LocalTime был создан со значением 00:30:00 в качестве значения столбца базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...