Сохранение даты 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, немного напоминает использование чисел с плавающей запятой для представления денежных сумм: обычно это огромный запах кода.