it-swarm.com.de

Was ist die Verwendung der @Temporal-Anmerkung in Hibernate?

Die Hibernate-Dokumentation enthält die folgenden Informationen für die Annotation @Temporal:

In einfachen Java-APIs ist die zeitliche Genauigkeit der Zeit nicht definiert . Wenn Sie mit zeitlichen Daten arbeiten, möchten Sie vielleicht das .__ beschreiben. erwartete Genauigkeit in der Datenbank. Zeitdaten können DATE, TIME oder .__ haben. TIMESTAMP-Genauigkeit (dh das tatsächliche Datum, nur die Uhrzeit oder beides). Benutzen die @ zeitliche Annotation, um das zu verfeinern.

Was bedeutet temporal precision of time is not defined? Was sind temporal-Daten und deren Genauigkeit? Wie stimmt es?

70
Chaitanya

Diese Anmerkung muss für persistente Felder oder Eigenschaften vom Typ Java.util.Date und Java.util.Calendar angegeben werden. Sie darf nur für Felder oder Eigenschaften dieser Typen angegeben werden.

Die Temporal-Annotation kann in Verbindung mit der Basic-Annotation, der Id-Annotation oder der ElementCollection-Annotation verwendet werden (wenn der Elementauflistungswert von einem solchen temporären Typ ist. 

In einfachen Java-APIs ist die zeitliche Genauigkeit der Zeit nicht definiert. Wenn Sie mit temporären Daten arbeiten, möchten Sie möglicherweise die erwartete Genauigkeit in der Datenbank beschreiben. Zeitdaten können eine DATE-, TIME- oder TIMESTAMP-Genauigkeit aufweisen (d. H. Das tatsächliche Datum, nur die Uhrzeit oder beides). Verwenden Sie die Annotation @Temporal, um das zu optimieren.

Die zeitlichen Daten sind die zeitbezogenen Daten. In einem Content-Management-System sind beispielsweise das Erstellungsdatum und das Datum der letzten Aktualisierung eines Artikels temporäre Daten. In einigen Fällen benötigen temporäre Daten Genauigkeit und Sie möchten ein genaues Datum oder beides (TIMESTAMP) in der Datenbanktabelle speichern.

Die zeitliche Genauigkeit wird in Core-Java-APIs nicht angegeben. @Temporal ist eine JPA-Annotation, die zwischen Zeitstempel und Java.util.Date hin und her konvertiert. Es wandelt auch time-stamp in Zeit um. Im folgenden Snippet beispielsweise @Temporal(TemporalType.DATE)löscht den Zeitwert und behält nur das Datum.

@Temporal(TemporalType.DATE)
private Java.util.Date creationDate;

Wie in Javadocs,

Anmerkung zur Deklaration eines geeigneten {@code TemporalType} für Abfrage Methodenparameter. Beachten Sie, dass diese Annotation nur für .__ verwendet werden kann. Parameter des Typs {@link Date} mit Standard TemporalType.DATE

[Informationen oben aus verschiedenen Quellen gesammelt]

76
Ankur Singhal

@Temporal ist eine JPA-Annotation, die nur zum Speichern von ZEIT (Java.sql.Time), DATUM (Java.sql.Date) oder ZEITSTEMPEL (Java.sql.Timestamp) verwendet werden kann. in der Datenbanktabelle. Im Allgemeinen, wenn wir ein Datumsfeld in der Klasse deklarieren und versuchen, es zu speichern. Der Zeitstempel wird in der Datenbank gespeichert.

private Date joinedDate;

der gespeicherte Wert sieht wie folgt aus: 08-07-17 04: 33: 35.870000000 PM 

Wenn wir nur das Datum in der Datenbank speichern möchten, können wir diese Annotation mit dem DATE-Attribut verwenden.

@Temporal(TemporalType.DATE)

private Date joinedDate;

Dieses Mal würde 08-07-17 in der Datenbank gespeichert

Es gibt auch einige andere Attribute von @Temporal, die je nach Anforderung verwendet werden können.

16
Avikool91

Zeittypen sind eine Gruppe von zeitbasierten Typen, die in permanenten Zustandszuordnungen verwendet werden können. 

Die Liste der unterstützten temporalen Typen enthält die drei Java.sql-Typen Java.sql.Date, Java.sql.Time und Java.sql.Timestamp und die beiden Java.util-Typen Java.util.Date und Java.util.Calendar.

Die Java.sql-Typen sind völlig problemlos. Sie verhalten sich wie alle anderen einfachen Zuordnungstypen und bedürfen keiner besonderen Überlegung. 

Die beiden Java.util-Typen benötigen jedoch zusätzliche Metadaten, um anzugeben, welche der JDBC-Java.sql-Typen bei der Kommunikation mit dem JDBC-Treiber verwendet werden sollen. Dies wird durch Annotieren mit der Annotation @Temporal und Angabe des JDBC-Typs als Wert des aufgezählten Typs TemporalType durchgeführt. 

Es gibt drei aufgezählte Werte von DATE, TIME und TIMESTAMP, um jeden der Java.sql-Typen darzustellen.

8
Montaser Mahadi

benutze das 

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

public Calendar getCreateDate() {
    return createDate;
}

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

Ich verwende Hibernate 5.2 und @Temporal ist nicht mehr erforderlich.
Java.util.date , sql.date , time.LocalDate werden mit einem geeigneten Datentyp als Datums-/Zeitstempel in der Datenbank gespeichert. 

0
Arun Raaj

Wenn Sie nach einer kurzen Antwort suchen:

Im Falle der Verwendung von Java.util.Date weiß Java nicht, wie es sich direkt auf SQL-Typen bezieht. Dann kommt @Temporal ins Spiel. Es wird verwendet, um den gewünschten SQL-Typ anzugeben.

Quelle: Baeldung

0
skryvets