What is the use of the @Temporal annotation in Hibernate?
The Hibernate Documentation has the information below for the @Temporal
annotation:
In plain Java APIs, the temporal precision of time is not defined. When dealing with temporal data you might want to describe the expected precision in database. Temporal data can have DATE, TIME, or TIMESTAMP precision (ie the actual date, only the time, or both). Use the @Temporal annotation to fine tune that.
What does temporal precision of time is not defined
mean? What is temporal
data and its precision? How does it fine tune?
Solution 1:
This annotation must be specified for persistent fields or properties of type java.util.Date
and java.util.Calendar
. It may only be specified for fields or properties of these types.
The Temporal
annotation may be used in conjunction with the Basic
annotation, the Id
annotation, or the ElementCollection
annotation (when the element collection value is of such a temporal type.
In plain Java APIs, the temporal precision of time is not defined. When dealing with temporal data, you might want to describe the expected precision in database. Temporal data can have DATE, TIME, or TIMESTAMP precision (i.e., the actual date, only the time, or both). Use the @Temporal
annotation to fine tune that.
The temporal data is the data related to time. For example, in a content management system, the creation-date and last-updated date of an article are temporal data. In some cases, temporal data needs precision and you want to store precise date/time or both (TIMESTAMP
) in database table.
The temporal precision is not specified in core Java APIs. @Temporal
is a JPA
annotation that converts back and forth between timestamp and java.util.Date
. It also converts time-stamp
into time. For example, in the snippet below, @Temporal(TemporalType.DATE)
drops the time value and only preserves the date.
@Temporal(TemporalType.DATE)
private java.util.Date creationDate;
As per javadocs,
Annotation to declare an appropriate {@code TemporalType} on query method parameters. Note that this annotation can only be used on parameters of type {@link Date} with default
TemporalType.DATE
[Information above collected from various sources]
Solution 2:
@Temporal
is a JPA annotation which can be used to store in the database table on of the following column items:
-
DATE (
java.sql.Date
) -
TIME (
java.sql.Time
) -
TIMESTAMP (
java.sql.Timestamp
)
Generally when we declare a Date
field in the class and try to store it.
It will store as TIMESTAMP in the database.
@Temporal
private Date joinedDate;
Above code will store value looks like 08-07-17 04:33:35.870000000 PM
If we want to store only the DATE in the database,
We can use/define TemporalType
.
@Temporal(TemporalType.DATE)
private Date joinedDate;
This time, it would store 08-07-17 in database
There are some other attributes as well as @Temporal
which can be used based on the requirement.