поддержка jodatime и hibernate меняет часовой пояс - PullRequest
1 голос
/ 12 декабря 2010

У меня есть постоянная сущность с полем LocalTime, сопоставленным со столбцом time without time zone в таблице postgre, я заполняю это поле в своем приложении следующим образом:

int hour = 10
int minutes = 12
MyEntity e = new MyEntity()
e.setTime(new LocalTime(hour, minutes) );

затем я сохраняю сущность в БД, используя hibernate, позже в приложении я извлекаю сущность и отображаю поле времени, оно правильно показывает 10:12, но когда я вижу значение в таблице (используя pg-admin), он показывает: 04:12 когда это должно быть 10:12, часовой пояс в моем jvm и в моей системе - CST (который является UTC-6), мне кажется, что где-то в hibernate или jodatime мое поле времени начинает преобразовываться в мой часовой пояс как при вставке в БД, так и при получении значений, я правильно? Есть ли способ предотвратить это поведение ?, я использую jre 1.6.0_22, hibernate 3, joda-time 1.5.1 и joda-time-hibernate 1.2

редактирование: забыл упомянуть, что поле отображается в спящем режиме с помощью:

type="org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime"

1 Ответ

2 голосов
/ 12 декабря 2010

Ну, это может быть устаревшим, но документы для класса с именем PersistentLocalTime говорят так:

Сохранение LocalTime через Hibernate как тип данных SQL TIME - обратите внимание, что значения меньше секундыне будут сохранены.Этот тип в основном совместим с org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime. Тем не менее, обратите внимание, что org.joda.time.contrib.hibernate.PersistentLocalTimeAsTime содержит ошибку, из-за которой записанное время будет смещено относительно времени GMT из-за использования Time.setTime (long) .Этот класс не подвержен этой проблеме, но это означает, что вы не можете полагаться на то, что интерпретация этого типа одинакова для обоих классов.

(Выделение мое.)

Звукикак будто вы столкнулись с этой проблемой, но использование вместо этого PersistentLocalTime исправит ее.

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