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