Что такое использование аннотации @Temporal в Hibernate?

в документации Hibernate есть информация ниже для @Temporal аннотация:

в простых API Java временная точность времени не определена. При работе с временными данными вы можете описать ожидаемая точность в базе данных. Временные данные могут содержать дату, время или Точность метки времени (т. е. фактическая дата, только время или оба). Использовать аннотация @Temporal для точной настройки.

что значит temporal precision of time is not defined в смысле? Что такое temporal данные и их точность? Как он настраивается?

4 ответов


эта аннотация должна быть указана для постоянных полей или свойств типа java.util.Date и java.util.Calendar. Он может быть указан только для полей или свойств этих типов.

на Temporal аннотация может использоваться в сочетании с Basic аннотации Id аннотации, или ElementCollection аннотация (когда значение коллекции элементов имеет такой временной тип.

в простых API Java временная точность времени не определена. При работе с временные данные, вы можете описать ожидаемую точность в базе данных. Временные данные могут иметь точность даты, времени или метки времени (т. е. фактическую дату, только время или оба). Используйте @Temporal аннотация для точной настройки.

временные данные-это данные, связанные со временем. Например, в системе управления контентом дата создания и дата последнего обновления статьи являются временными данными. В некоторых случаях временные данные требуют точности, и вы хотите сохранить точность дата / время или оба (TIMESTAMP) в таблице базы данных.

временная точность не указана в основных API Java. @Temporal это JPA аннотация, которая преобразует туда и обратно между меткой времени и java.util.Date. Он также преобразует time-stamp во время. Например, в приведенном ниже фрагменте @Temporal(TemporalType.DATE) сбрасывает значение времени и сохраняет только дату.

@Temporal(TemporalType.DATE)
private java.util.Date creationDate;

согласно javadocs,

заметка для объявления соответствующий {@code TemporalType} для запроса параметр метода. Обратите внимание, что эта аннотация может использоваться только на параметры типа {@link Date} с по умолчанию TemporalType.DATE

[информация, собранная из различных источников]


@Temporal является аннотацией JPA, которая может использоваться только для хранения времени (java.sql.Time),дата(java.sql.Date) или метка (java.sql.Timestamp) в таблице базы данных. Обычно, когда мы объявляем поле даты в классе и пытаемся сохранить его. Он будет хранить метку времени в базе данных.

private Date joinedDate;

сохраненное значение выглядит как 08-07-17 04:33: 35.870000000 PM

если мы хотим сохранить только дату в база данных, мы можем использовать эту аннотацию с атрибутом DATE.

@Temporal(TemporalType.DATE)

private Date joinedDate;

на этот раз он будет хранить 08-07-17 в базе

есть некоторые другие атрибуты, а также @Temporal которое можно использовать основало на требовании.


временные типы-это набор временных типов, которые могут использоваться в сопоставлениях постоянных состояний.

список поддерживаемых временных типов включает в себя три java.sql типы java.sql.Date, java.sql.Time и java.sql.Timestamp, и она включает в себя два java.util типы java.util.Date и java.util.Calendar.

на java.sql типы полностью без проблем. Они действуют так же, как и любой другой простой тип отображения и не нуждаются в особом рассмотрении.

два java.util типы однако дополнительные метаданные указывают, какой из JDBC java.sql типы для использования при общении с драйвером JDBC. Это делается путем аннотирования их с помощью @Temporal аннотация и указание типа JDBC в качестве значения TemporalType перечислимый тип.

существует три перечисленных значения даты, времени и метки времени для представления каждого из java.sql типы.


использовать

@Temporal(TemporalType.TIMESTAMP)
@Column(name="create_date")
private Calendar createDate;

public Calendar getCreateDate() {
    return createDate;
}

public void setCreateDate(Calendar createDate) {
    this.createDate = createDate;
}