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