Hibernate непоследовательно возвращает временные метки по местному времени - PullRequest
0 голосов
/ 13 января 2012

У меня есть приложение Spring, которое использует Hibernate. Требование состоит в том, чтобы сохранить и извлечь временные метки в GMT. Я установил часовой пояс приложения на GMT с помощью прослушивателя контекста, как показано ниже.

TimeZone.setDefault (TimeZone.getTimeZone ( "GMT"));

Хотя приложение теперь постоянно сохраняет временные метки в GMT, а получение временных меток из слоя гибернации несовместимо. Временные метки возвращаются несколько раз в PST (часовой пояс сервера).

Мой запрос на получение данных, как показано ниже

Запрос q = entityManager.createQuery («ВЫБЕРИТЕ ОТЛИЧИЕ ОТ foo как f ГДЕ f.ID =? 1 И f.ID2 =? 2 ORDER> BY ID DESC»). SetParameter (1, id1) .setParameter (2 , id2);

q.setFirstResult (пропуск) .setMaxResults (вверху) .getResultList (); * +1014 *

Есть идеи по решению этой проблемы?

1 Ответ

2 голосов
/ 13 января 2012

Отметка времени не имеет часового пояса. Только когда вы отображаете его (абсолютное) значение, часовой пояс используется для значимого представления времени.

Просто используйте соответствующий часовой пояс каждый раз, когда вы хотите отобразить отметку времени (установив часовой пояс по умолчанию или установив его в формате даты, используемом для отображения отметки времени).

Более того, IIRC, устанавливая часовой пояс по умолчанию, устанавливает его только для текущего потока, а потоки запускаются из текущего потока. Другие темы не затрагиваются.

...