java - example - ¿Cuál es el uso de la anotación @Temporal en Hibernate?
hibernate spring (4)
La documentación de Hibernate tiene la siguiente información para la anotación @Temporal
:
En las API Java simples, la precisión temporal del tiempo no está definida. Al tratar con datos temporales, es posible que desee describir la precisión esperada en la base de datos. Los datos temporales pueden tener una precisión de DATE, TIME o TIMESTAMP (es decir, la fecha real, solo la hora o ambas). Usa la anotación @Temporal para afinar eso.
¿Qué significa temporal precision of time is not defined
significa? ¿Qué son temporal
datos temporal
y su precisión? ¿Cómo lo sintoniza?
Esta anotación se debe especificar para los campos persistentes o las propiedades de tipo java.util.Date
y java.util.Calendar
. Solo se puede especificar para campos o propiedades de estos tipos.
La anotación Temporal
se puede usar junto con la anotación Basic
, la anotación Id
o la anotación ElementCollection
(cuando el valor de la colección de elementos es de ese tipo temporal).
En las API Java simples, la precisión temporal del tiempo no está definida. Al tratar con datos temporales, es posible que desee describir la precisión esperada en la base de datos. Los datos temporales pueden tener una precisión de DATE, TIME o TIMESTAMP (es decir, la fecha real, solo la hora o ambas). Usa la anotación @Temporal
para afinar eso.
Los datos temporales son los datos relacionados con el tiempo. Por ejemplo, en un sistema de gestión de contenido, la fecha de creación y la fecha de última actualización de un artículo son datos temporales. En algunos casos, los datos temporales necesitan precisión y usted desea almacenar la fecha / hora precisa o ambos ( TIMESTAMP
) en la tabla de la base de datos.
La precisión temporal no está especificada en las API centrales de Java. @Temporal
es una anotación JPA
que se convierte de ida y vuelta entre timestamp y java.util.Date
. También convierte time-stamp
tiempo en tiempo. Por ejemplo, en el siguiente fragmento, @Temporal(TemporalType.DATE)
descarta el valor del tiempo y solo conserva la fecha .
@Temporal(TemporalType.DATE)
private java.util.Date creationDate;
Según javadocs,
Anotación para declarar un {@code TemporalType} apropiado en los parámetros del método de consulta. Tenga en cuenta que esta anotación solo se puede usar en parámetros del tipo {@link Date} con
TemporalType.DATE
predeterminado
[Información anterior recopilada de diversas fuentes]
Los tipos temporales son el conjunto de tipos basados en el tiempo que se pueden usar en las asignaciones de estado persistentes.
La lista de tipos temporales compatibles incluye los tres tipos java.sql.Date
, java.sql.Time
y java.sql.Timestamp
, e incluye los dos tipos java.util.Date
y java.util.Calendar
.
Los tipos java.sql
son completamente sencillos. Actúan como cualquier otro tipo de mapeo simple y no necesitan ninguna consideración especial.
Sin embargo, los dos tipos de java.util
necesitan metadatos adicionales para indicar cuál de los tipos de JDBC java.sql
debe utilizar al comunicarse con el controlador JDBC. Esto se hace @Temporal
con la anotación @Temporal
y especificando el tipo JDBC como un valor del tipo enumerado TemporalType
.
Hay tres valores enumerados de DATE, TIME y TIMESTAMP para representar cada uno de los tipos java.sql
.
utilizar esta
@Temporal(TemporalType.TIMESTAMP)
@Column(name="create_date")
private Calendar createDate;
public Calendar getCreateDate() {
return createDate;
}
public void setCreateDate(Calendar createDate) {
this.createDate = createDate;
}
@Temporal
es una anotación JPA que se puede usar para almacenar solo TIME ( java.sql.Time
), DATE ( java.sql.Date
) o TIMESTAMP ( java.sql.Timestamp
) en la tabla de la base de datos. Generalmente cuando declaramos un campo de Fecha en la clase e intentamos almacenarlo. Almacenará la marca de tiempo en la base de datos.
private Date joinedDate;
el valor almacenado se ve como 08-07-17 04: 33: 35.870000000 PM
Si queremos almacenar solo la fecha en la base de datos, podemos usar esta anotación con el atributo DATE.
@Temporal(TemporalType.DATE)
private Date joinedDate;
Esta vez, almacenaría 08-07-17 en la base de datos
También hay otros atributos de @Temporal
que se pueden usar en función del requisito.