Сохранение даты Joda DateTime вместо Java Date в спящем режиме

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

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

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

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

Относительно Криса.

Ответ 3

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

java.util.Date

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

Joda времени

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

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

Ответ 4

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

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