Мои объекты в настоящее время содержат свойства Date Java. Я начинаю использовать Время Joda для управления датой и вычислений вполне часто. Это означает, что я должен постоянно преобразовывать свои Даты в объекты Joda DateTime и назад снова.
Таким образом, я задавался вопросом, там какая-либо причина, я не должен только изменять свои объекты, чтобы хранить объекты Joda DateTime вместо объектов Даты Java?
Обратите внимание на то, что эти объекты сохраняются через, в спящем режиме. Я нашел jodatime-быть-в-спящем-режиме проект, но я также читал в списке рассылки Joda, из которого это не было совместимо с более новыми версиями, в спящем режиме. И кажется, что это очень хорошо не сохраняется.
Таким образом, я задаюсь вопросом, было ли лучше только продолжить преобразовывать между Датой и DateTime, или если было бы мудро начать сохранять объекты DateTime. Мое беспокойство уверено в плохо сохраняемой библиотеке.
Править: Обратите внимание, что одна из моих целей состоит в том, чтобы быть лучше способна хранить информацию часового пояса. Хранение просто Даты, кажется, сохраняет дату в локальном часовом поясе. Поскольку мое приложение может использоваться глобально, я должен знать часовой пояс также. Время Joda В спящем режиме, кажется, обращается к этому также в руководстве пользователя.
Я думаю, что использование Joda DateTime в качестве типа свойства bean-компонента, вероятно, является хорошей идеей. Затем вы можете заставить Hibernate выполнить преобразование и сохранить свойство как собственный формат даты базы данных.
Я лично использовал jodatime-hibernate, и у меня не было проблем с ним (мы используем Hibernate 3.2.5GA).
Если вас беспокоит jodatime-hibernate, вы всегда можете использовать механизм пользовательского сопоставления типов Hibernate (который, я уверен, полностью выполняет jodatime-hibernate).
Даты не должны храниться с использованием высокого уровня абстракции, как, скажем, строка ("2009-08-07 07:43:19 ...") или как Java-объекты. Они должны сохраняться в виде миллисекунд, начиная с эпохи. Как время Joda, так и обычное время Java-даты могут дать вам время в миллисекундах с эпохи. Храните количество прошедших миллисекунд и конвертируйте их обратно в объекты при считывании с вашей БД.
Сохранение тяжеловесных объектов даты вместо длинных немного похоже на использование чисел с плавающей запятой для представления денежных сумм: обычно это огромный запах кода.
Joda Time Hibernate можно использовать с недавними выпусками Hibernate - вам может потребоваться небольшая настройка графа зависимостей, вот и все (например, установка исключений). Могу я также предложить вам взглянуть на User Type, который я опубликовал на Sourceforge. Это предоставляет типы пользователей для Joda Time, которые призваны избежать проблемы смещения клиента, о которой вы упомянули. Буду признателен за любые отзывы об этом проекте. https://sourceforge.net/projects/usertype/files/
С уважением, Крис.