Мы находимся в середине проекта модернизации нашего приложения OSGi сервера от:Weird вопрос Свидание с Hibernate в сервере OSGI Karaf
- Karaf 2.3.1
- OSGi Ядро 4.3.0
- гибернации 3.4.0 Г.А.
- Пружина (включая SpringDM) 3.2.2.RELEASE
- c3p0 пула соединений 0.9.1.2
- PostgreSQL Драйвер 9.1.901
To:
- Karaf 4.0.5
- OSGi Ядро 6.0.0
- Hibernate 5.0.9.Final
- Hikari пула соединений 2.4.3
- Драйвер PostgreSQL 9.4- 1204-jdbc42
В новой версии используется декларативная служба ces вместо Spring DM.
После преобразования мы начали получать проблемы с получением Даты из базы данных. Любая дата, которая содержит дату перехода на летнее время в НЗ в этом году (25 сентября), получает непоследовательные результаты. Первые 5 раз мы запрашиваем эту дату после того, как сервер запустил, дата верна. Однако после этого он изменится на дату раньше. То есть, если база данных содержит «2016-09-25», она возвращает «2016-09-24».
Первоначально мы думали, что это была проблема населения JPA Entity, но теперь мы сузили его до очень простой Native Query:
em.createNativeQuery("SELECT DATE '2016-09-25'").getResultList()
, который возвращает объект Date с 25, время 00:00 сначала несколько раз, затем он возвращает объект Date с 24-м, после этого - 11:00.
Странная вещь, если добавить время, как это:
em.createNativeQuery("SELECT DATE '2016-09-25 00:00:00'").getResultList()
то мы всегда получаем объект Date с 25, время 00:00.
Что мы пытались:
- Базовая тестовая программа, которая делает простой запрос JDBC - хорошо работает каждый раз
- Hibernate Entity менеджер вне Karaf - хорошо работает каждый раз
- Сроки, кроме 2016 -09-25 - работает нормально каждый раз
Я могу понять, что применение летнего сбережения или нет приведет к одному из этих значений даты. Я не понимаю, почему это непоследовательно.
Извините, христианин, в конце концов, в Карафе была красная селедка. Пожалуйста, см. Мой ответ. – DuncanKinnear