Яка користь від анотації @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.