Какая польза от аннотации @Temporal в Hibernate? - программирование
Подтвердить что ты не робот

Какая польза от аннотации @Temporal в Hibernate?

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

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

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

4b9b3361

Ответ 1

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

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

В простых API Java временная точность времени не определена. При работе с временными данными вы можете описать ожидаемую точность в базе данных. Временные данные могут иметь точность DATE, TIME или TIMESTAMP (т.е. Фактическую дату, только время или оба). Для точной настройки используйте аннотацию @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

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

Ответ 2

@Temporal - аннотация JPA, которую можно использовать для хранения в таблице базы данных следующих элементов столбца:

  1. ДАТА (java.sql.Date)
  2. ВРЕМЯ (java.sql.Time)
  3. TIMESTAMP (java.sql.Timestamp)

Обычно, когда мы объявляем поле Date в классе и пытаемся сохранить его.
Он будет храниться как TIMESTAMP в базе данных.

@Temporal
private Date joinedDate;

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

Если мы хотим хранить только ДАТУ в базе данных,
Мы можем использовать/определить TemporalType.

@Temporal(TemporalType.DATE)
private Date joinedDate;

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

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

Ответ 3

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

Список поддерживаемых типов времени включает в себя три типа 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.

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

Ответ 4

используйте этот

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

public Calendar getCreateDate() {
    return createDate;
}

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

Ответ 5

Я использую Hibernate 5.2 и @Temporal больше не требуется.
java.util.date, sql.date, time.LocalDate хранятся в БД с соответствующим типом данных в виде даты/времени.

Ответ 6

Если вы ищете короткий ответ:

В случае использования java.util.Date Java на самом деле не знает, как напрямую соотноситься с типами SQL. Это когда @Temporal вступает в игру. Используется для указания желаемого типа SQL.

Источник: Baeldung