Я добавлю это как отдельный ответ, поскольку, на мой взгляд, это важная информация для всех, кто переходит на Hibernate 4 и нуждается в переходе на использование постоянных временных типов jadira. Эта страница занимает высокие позиции в результатах поиска Google для hibernate 4 и jodatime, поэтому я добавлю ее сюда. (Для отдельного обсуждения этой проблемы см.: Joda time DateTime неправильно сохраняет в базе данных а>)
Если вы находитесь в часовом поясе, отличном от UTC, необходима важная часть конфигурации, чтобы получить то же поведение, что и с типом поддержки гибернации joda-time. По умолчанию временные типы jadira работают путем преобразования всех значений в часовой пояс UTC перед сохранением в базе данных и обратного преобразования в системный часовой пояс при загрузке значений из базы данных.
Я обжегся на этом после обновления, когда у меня было много временных меток с моим точным часовым поясом в базе данных (UTC+1 (+2 по летнему времени)). При загрузке после обновления до Hibernate 4 к значению в базе данных добавлялось 1 или 2 часа (в зависимости от того, была ли временная метка в летнее время), что означало, что все существующие временные метки были представлены ошибочно. Кроме того, новые значения меток времени сохранялись в базе данных с часовым поясом UTC, благодаря чему они корректно отображались в приложении, но неправильно отображались в базе данных. В общем, горячий беспорядок часовых поясов и временных меток.
Итак, чтобы получить то же поведение, что и при поддержке joda-time hibernate (дата-время сохраняется в часовом поясе рассматриваемого сервера, а временные метки в базе данных совпадают с тем, что загружается в приложение) , в конфигурацию JPA/Hibernate необходимо добавить следующие свойства (в моем случае hibernate.properties
):
jadira.usertype.autoRegisterUserTypes=true
jadira.usertype.databaseZone=jvm
jadira.usertype.javaZone=jvm
Это гарантирует, что метки времени в базе данных будут того же часового пояса, что и у приложения, которое, в свою очередь, будет часовым поясом jvm (в большинстве случаев часы сервера приложений).
Кроме того, насколько я понимаю, свойство autoRegisterUserTypes
устраняет необходимость в аннотации @Type
для выбора общих типов, среди которых типы Jodatime DateTime
и LocalDate
.
person
Tobb
schedule
21.08.2013