Сохранение Joda DateTime вместо Java Date в Hibernate - PullRequest
15 голосов
/ 03 февраля 2010

Мои объекты в настоящее время содержат свойства даты Java. Я начинаю использовать Joda Time для манипулирования датами и вычислений довольно часто. Это означает, что мне постоянно приходится конвертировать мои даты в объекты Joda DateTime и обратно.

Поэтому мне было интересно, есть ли причина, по которой я не должен просто изменять свои сущности для хранения объектов Joda DateTime вместо объектов Java Date?

Обратите внимание, что эти сущности сохраняются через Hibernate. Я нашел проект jodatime-hibernate , но я также читал в списке рассылки Joda, что он не совместим с более новыми версиями hibernate. И кажется, что он не очень хорошо поддерживается.

Так что мне интересно, будет ли лучше просто продолжить преобразование между Date и DateTime, или было бы разумно начать сохранять объекты DateTime. Я беспокоюсь о том, что мне нужна плохая библиотека.

Редактировать. Обратите внимание, что одна из моих целей - лучше хранить информацию о часовом поясе. Сохранение только даты появляется для сохранения даты в местном часовом поясе. Поскольку мое приложение может использоваться во всем мире, мне также необходимо знать часовой пояс. Joda Time Hibernate, похоже, решает эту проблему и в руководстве пользователя .

Ответы [ 4 ]

5 голосов
/ 01 мая 2010

Joda Time Hibernate можно использовать с последними выпусками Hibernate - вам может понадобиться немного изменить график зависимостей, и все (например, установка исключений).Могу ли я также предложить вам взглянуть на Тип пользователя, который я выпустил на Sourceforge.Это предоставляет типы пользователей для Joda Time, которые направлены на то, чтобы избежать упомянутой вами проблемы смещения клиента.Буду признателен за любые ваши отзывы об этом проекте.https://sourceforge.net/projects/usertype/files/

С уважением, Крис.

3 голосов
/ 15 июля 2011

Итак, подведем итог:

java.util.Date

  • + встроенная поддержка в Hibernate
  • - плохой API

Joda-Time

  • + лучший API
  • - отсутствие встроенной поддержки в Hibernate

Лично, если бы я мог сохранить модель домена и «уровень сервиса» чистыми, просто используя стороннюю библиотеку (очевидно, Тип пользователя для Hibernate в этом случае), и альтернативой было бы написать несколько код для выполнения преобразования «вручную» каждый раз, когда это было необходимо, я бы пошел со сторонней библиотекой.

3 голосов
/ 03 февраля 2010

Я думаю, что использование Joda DateTime в качестве типа вашего свойства bean является хорошей идеей. После этого Hibernate сможет выполнить преобразование и сохранить свойство как собственный формат даты базы данных.

Я лично использовал jodatime-hibernate и у меня не было проблем с ним (мы используем Hibernate 3.2.5GA).

Если у вас есть опасения по поводу jodatime-hibernate, вы всегда можете использовать Специальный механизм отображения типов в Hibernate (что, я уверен, все jodatime-hibernate).

0 голосов
/ 03 февраля 2010

Даты не должны храниться с использованием высокого уровня абстракции, например, в виде строки («2009-08-07 07:43:19 ...»), а также в виде объектов Java.Они должны сохраняться в миллисекундах с начала эпохи.И время Joda, и обычное время даты Java могут дать вам время в миллисекундах с начала эпохи.Сохраняйте количество прошедших миллисекунд и конвертируйте обратно в объекты, когда вы читаете данные из своей БД.

Сохранение тяжеловесных объектов Date вместо long немного похоже на использование чисел с плавающей запятой для представления денежных сумм: обычно это огромный запах кода.

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