Hibernate с использованием java.sql.Date неправильно? - PullRequest
1 голос
/ 23 сентября 2019

Я обращаюсь к сообществу, потому что либо обнаружил проблему с Hibernate, либо я просто не понимаю, как использовать java.sql.Date и java.time.LocalDate.

У меня возникла проблемагде моя БД находится в часовом поясе UTC, а мой клиент - в EST.У меня в БД есть поле с именем ETA типа DATE, которое, например, для записи установлено на 2019-09-10.Когда я читаю дату в EST, она становится 2019-09-09.Поле DATE согласно документации не содержит информации о часовом поясе.

Когда Hibernate читает значение, он использует класс DateTypeDescriptor.java.Однако проблема этого класса заключается в том, что он сначала попытается прочитать значение как java.sql.Date (в части rs.getDate( name )) и , а затем , вызов java.sql.Date.toLocalDate() в части javaTypeDescriptor.wrap(), которая реализована плохо, потому что она удаляет информацию о смещении часового пояса и просто возвращает дату.Это делает 2019-09-09T20:00:00.000-0400 (то есть 2019-09-10 в базе данных) стать 2019-09-09 без части смещения часового пояса.

Что я считаю проблемой, это та часть, где Hibernate вызывает rs.getDate(), потому что она должна возвращатьjava.sql.Date.Теперь драйвер MySQL содержит метод public LocalDate getLocalDate(int columnIndex) для получения LocalDate, поэтому я не понимаю, почему Hibernate не использует этот метод.

Я обнаружил, что кто-то уже поднял эту проблему с ними , но они, похоже, не считают это проблемой.

Поэтому я обращаюсь сюда, чтобы понять - есть ли ошибка в Hibernate илия просто не понимаю, как правильно конвертировать между DATE (DB) и LocalDate (Java) типами.

PS: я использую последний Hibernate 5.4.5 и последний JPA 2.2.

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