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?
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]
@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.
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.
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;
}
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.
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