Какая польза от аннотации @Temporal в Hibernate?
Документация Hibernate имеет следующую информацию для аннотации @Temporal
:
В простых API Java временная точность времени не определена. При работе с временными данными вы можете ожидаемая точность в базе данных. Временные данные могут иметь DATE, TIME или Точность TIMESTAMP (т.е. фактическая дата, только время или оба). использование @Temporal аннотация для тонкой настройки.
Что означает temporal precision of time is not defined
? Что такое temporal
данные и его точность? Как это настроить?
Ответы
Ответ 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, которую можно использовать для хранения в таблице базы данных следующих элементов столбца:
- ДАТА (
java.sql.Date
) - ВРЕМЯ (
java.sql.Time
) - 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