Яка користь від анотації @Temporal у режимі глибокого сну?


101

Документація про сплячий режим містить інформацію нижче для @Temporalанотації:

У звичайних API Java часова точність часу не визначається. При роботі з тимчасовими даними ви можете описати очікувану точність у базі даних. Часові дані можуть мати точність DATE, TIME або TIMESTAMP (тобто фактичну дату, лише час або обидва). Використовуйте анотацію @Temporal для точної настройки.

Що робить temporal precision of time is not defined означає? Що таке temporalдані та їх точність? Як це тонко налаштовується?


3
Якщо ви використовуєте Календар як властивість Entity, то в звичайній Java він друкує багато інформації, яка не потрібна, коли ви хочете зберегти його в базі даних, наприклад. У такому випадку ви можете мати щось на зразок @Temporal (TemporalType.TIMESTAMP) Календар календаря у вашій сутності для збереження мітки часу у вашій базі даних або просто дати або просто часу, змінивши значення @Temporal (TemporalType.DATE) або @Temporal (TemporalType.TIME) у властивості вашого календаря.
— user3487063

Відповіді:


104

Ця анотація повинна бути вказана для постійних полів або властивостей типу 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

[Інформація, зібрана вище з різних джерел]


Чому я не можу використовувати його з часом типу Java?
— пудра366

3
Тож якщо ви просто використовуєте TemporalType.TIMESTAMP ... чи є сенс використовувати цю анотацію? Дати, здається, добре працюють для цього без цього ..
— Амалговін

як я можу зберігати в MySql DB у форматі якyyyy-MM-dd
— Shantaram Tupe

@shantaram_t це може вам допомогти
— Ankur Singhal

1
У мене є вхід: 02/10/2017і я хочу перетворити його на 2017-10-02або2017/10/02
— Шантарам Тупе

42

@Temporal - це анотація JPA, яку можна використовувати для зберігання в таблиці бази даних таких елементів стовпців:

  1. ДАТА ( java.sql.Date)
  2. ЧАС ( java.sql.Time)
  3. ГРАФІК ( 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які можна використовувати на основі вимоги.


Значення за замовчуванням - TemporalType.DATE. Не уявляєте, чому ви вказали значення без анотованих атрибутів із часовою частиною.
— Саймон Логік

якщо дві дати однакові, то за заповітом вищезгаданий аспект працює (TemporalType.DATE).
— Лова Чіттумурі,

Не робити Копіювати Вставити відповідь. stackoverflow.com/questions/25333711 / ...
— Лов Chittumuri

10

Тимчасові типи - це набір часових типів, які можуть бути використані в постійних відображеннях стану.

Список підтримуваних типів тимчасових включає в себе три java.sqlтипу java.sql.Date, java.sql.Timeі java.sql.Timestamp, і вона включає в себе два java.utilтипу java.util.Dateіjava.util.Calendar .

The java.sql типи повністю без проблем. Вони діють так само, як і будь-який інший простий тип відображення, і не потребують особливого розгляду.

Однак два java.utilтипи потребують додаткових метаданих, щоб вказати, який із java.sqlтипів JDBC використовувати під час спілкування з драйвером 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;
}

4

Якщо ви шукаєте коротку відповідь:

У випадку використання java.util.Date, Java насправді не знає, як безпосередньо пов'язати типи SQL. Це коли @Temporalвступає в гру. Він використовується для вказівки бажаного типу SQL.

Джерело: Baeldung


3

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


то яке рішення, якщо ми хочемо зберегти дату лише за допомогою Hibernate 5.x
— Kms

Використання Java 8 LocalDate
— Джош

1

Ми використовуємо анотацію @Temporal, щоб вставити дату, час або те й інше в таблицю бази даних. За допомогою TemporalType ми можемо вставити дані, час або обидві таблиці int.

@Temporal(TemporalType.DATE) // insert date
@Temporal(TemporalType.TIME) // insert time
@Temporal(TemporalType.TIMESTAMP) // insert  both time and date.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.