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


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

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

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

4 57

4 ответа:

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

The 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

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

@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.

The 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;
}