Сохраняющееся поле метки времени как Дата или Длинна? - PullRequest
5 голосов
/ 29 марта 2012

Мне нужен консенсус относительно практики сохранения временных меток, особенно относительно преимуществ и недостатков использования java.util.Date по сравнению с использованием long.

Объем этого обсуждения:

  • Performance
  • Запрос гибкости (например, диапазон дат)
  • Любые опасности при кодировании и запросе
  • Переносимость (например, перенос в другую БД)

О себе: Я считаю себя новичком в JPA, время от времени увлекаюсь им, не имея возможности применять его в проектах уровня производства до сих пор. В моем текущем проекте я обязуюсь использовать ObjectDB (встроенный) через вызовы JPA.

Ответы [ 3 ]

6 голосов
/ 30 марта 2012

Следующий класс демонстрирует 3 возможных метода сохранения временных меток в JPA:

@Entity
public class Timestamps {
    private java.sql.Timestamp ts1;
    private @Temporal(TemporalType.TIMESTAMP) java.util.Date ts2;
    private long ts3;
    :
}

Что касается производительности и потребления памяти, ts3 немного более эффективен.

ts3 может быть менее удобным дляиспользуйте чем ts1 и ts2 (в ObjectDB Database Explorer, отчетах и ​​т. д.).

Базовые запросы, такие как поиск по диапазону дат, поддерживаются для всех трех, но извлекаются части даты и времени (YEAR, MONTH и т. д..) в запросах не поддерживается для ts3.

Ожидается, что все эти формы будут переносимыми.

ts1 и ts2 практически эквивалентны.

Более подробная информация представлена ​​в Руководство по ObjectDB .

0 голосов
/ 16 мая 2017

Вы должны знать о факте java.sql.Timestamp перед его использованием:

В библиотеках платформы Java есть некоторые классы, которые расширяют создаваемый экземпляр. Класс и добавить компонент стоимости. Например, java.sql.Timestamp расширяет java.util.Date и добавляет поле наносекунд. Равная реализация для Timestamp нарушает симметрию и может вызвать ошибочное поведение, если Объекты Timestamp и Date используются в одной коллекции или смешаны иным образом. У класса Timestamp есть отказ от ответственности, предупреждающий программистов о смешивание дат и временных меток. Пока вы не будете в беде, пока вы держать их отдельно, ничто не мешает вам смешивать их, и В результате ошибки могут быть трудно отладить. Такое поведение класса Timestamp было ошибка и не должна быть подражать. (Bloch, Effective Java, 2nd Ed.)

0 голосов
/ 29 марта 2012

В документации по java похоже, что отметка времени ближе связана с java.util.date

http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/Timestamp.html

Кроме того, если вы заботитесь о семантике вашего кода, отметка временисвидание.

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