La documentation d'Hibernate contient les informations ci-dessous pour l'annotation @Temporal
:
Dans les API Java simples, la précision temporelle du temps n'est pas définie . Lorsque vous traitez avec des données temporelles, vous voudrez peut-être décrire le fichier précision attendue dans la base de données. Les données temporelles peuvent avoir DATE, TIME ou Précision TIMESTAMP (c'est-à-dire la date réelle, uniquement l'heure ou les deux). Utilisation l'annotation @Temporal pour affiner cela.
Que signifie temporal precision of time is not defined
? Que sont les données temporal
et leur précision? Comment ça se règle?
Cette annotation doit être spécifiée pour les champs persistants ou les propriétés de type Java.util.Date
et Java.util.Calendar
. Il ne peut être spécifié que pour les champs ou les propriétés de ces types.
L'annotation Temporal
peut être utilisée conjointement avec l'annotation Basic
, l'annotation Id
ou l'annotation ElementCollection
(lorsque la valeur de collection d'éléments est d'un tel type temporel.
Dans les API Java simples, la précision temporelle du temps n'est pas définie. Lorsque vous traitez avec des données temporelles, vous voudrez peut-être décrire la précision attendue dans la base de données. Les données temporelles peuvent avoir une précision DATE, TIME ou TIMESTAMP (c'est-à-dire la date réelle, uniquement l'heure ou les deux). Utilisez l'annotation @Temporal
pour affiner cela.
Les données temporelles sont les données liées au temps. Par exemple, dans un système de gestion de contenu, la date de création et la date de dernière mise à jour d'un article sont des données temporelles. Dans certains cas, les données temporelles ont besoin de précision et vous souhaitez stocker une date/heure précise ou les deux (TIMESTAMP
) dans la table de base de données.
La précision temporelle n'est pas spécifiée dans les API Java principales. @Temporal
est une annotation JPA
qui effectue un va-et-vient entre timestamp et Java.util.Date
. Il convertit également time-stamp
en temps. Par exemple, dans l'extrait de code ci-dessous, @Temporal(TemporalType.DATE)
supprime la valeur de l'heure et ne conserve que la date.
@Temporal(TemporalType.DATE)
private Java.util.Date creationDate;
Comme javadocs,
Annotation pour déclarer un {@code TemporalType} approprié sur la requête paramètres de la méthode. Notez que cette annotation ne peut être utilisée que sur paramètres de type {@link Date} avec
TemporalType.DATE
par défaut
[Informations ci-dessus recueillies de diverses sources]
@Temporal
est une annotation JPA qui peut être utilisée pour stocker uniquement HEURE (Java.sql.Time
), DATE (Java.sql.Date
) ou HORODATAGE (Java.sql.Timestamp
) dans le table de base de données. Généralement, lorsque nous déclarons un champ Date dans la classe et essayons de le stocker. Il va stocker l'horodatage dans la base de données.
private Date joinedDate;
la valeur stockée ressemble à 08-07-17 04: 33: 35.870000000 PM
Si nous voulons stocker uniquement la date dans la base de données, nous pouvons utiliser cette annotation avec l'attribut DATE.
@Temporal(TemporalType.DATE)
private Date joinedDate;
Cette fois, il stockerait 08-07-17 dans la base de données
Il existe également d’autres attributs de @Temporal
qui peuvent être utilisés en fonction des besoins.
Les types temporels sont l'ensemble des types temporels pouvant être utilisés dans les mappages d'états persistants.
La liste des types temporels pris en charge comprend les trois types Java.sql
, Java.sql.Date
, Java.sql.Time
et Java.sql.Timestamp
, ainsi que les deux types Java.util
, Java.util.Date
et Java.util.Calendar
.
Les types Java.sql
sont totalement sans tracas. Ils agissent comme tout autre type de mappage simple et ne nécessitent aucune considération particulière.
Cependant, les deux types Java.util
nécessitent des métadonnées supplémentaires pour indiquer le type JDBC Java.sql
à utiliser lors de la communication avec le pilote JDBC. Pour ce faire, annotez-les avec l'annotation @Temporal
et spécifiez le type JDBC en tant que valeur du type énuméré TemporalType
.
Il existe trois valeurs énumérées: DATE, TIME et TIMESTAMP pour représenter chacun des types Java.sql
.
utilisez ceci
@Temporal(TemporalType.TIMESTAMP)
@Column(name="create_date")
private Calendar createDate;
public Calendar getCreateDate() {
return createDate;
}
public void setCreateDate(Calendar createDate) {
this.createDate = createDate;
}
J'utilise Hibernate 5.2 et @Temporal
n'est plus requis.
Java.util.date , sql.date , time.LocalDate sont stockés dans une base de données avec le type de données approprié (date/timestamp).
Si vous cherchez une réponse courte:
Dans le cas de l'utilisation de Java.util.Date, Java ne sait pas vraiment comment se connecter directement aux types SQL. C'est à ce moment que @Temporal
entre en jeu. Il est utilisé pour spécifier le type SQL souhaité.
Source: Baeldung