Points To Remember
@Temporal annotation must be used with the persistent fields or properties of type- java.util.Date
- java.util.Calendar
How to use @Temporal annotation
@Temporal Annotation is defined as following@Target({ METHOD, FIELD })
@Retention(RUNTIME)
public @interface Temporal {
/**
* The type used in mapping <code>java.util.Date</code> or <code>java.util.Calendar</code>.
*/
TemporalType value();
}
So the TemporalType is an Enum and looks like following
public enum TemporalType {So @Temporal annotation can take three values DATE, TIME and TIMESTAMP. And it will create the following database ddl type.
DATE,
TIME,
TIMESTAMP
}
TemporalType | Database DDL Type |
---|---|
DATE | date |
TIMESTAMP | datetime |
TIME | time |
If we the following class as Hibernate Entity
package com.ekiras.domian;It will create the output as shown in the image below.
import javax.persistence.*;
import java.util.Date;
@Entity
public class User {
@Id
@SequenceGenerator(name = "test")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "test")
private Long id;
@Temporal(value = TemporalType.DATE)
private Date dateCreated1;
@Temporal(value = TemporalType.TIMESTAMP)
private Date dateCreated2;
@Temporal(value = TemporalType.TIME)
private Date dateCreated3;
// GETTERS and SETTERS
}
If we try to add @Temporal annotation to any other field other than of type Date and Calender we will get the following exception
Caused by: org.hibernate.AnnotationException: @Temporal should only be set on a java.util.Date or java.util.Calendar property: com.ekiras.domian.User.name
at org.hibernate.cfg.annotations.SimpleValueBinder.setType(SimpleValueBinder.java:182)
at org.hibernate.cfg.annotations.PropertyBinder.makePropertyAndValue(Propertyjava:195)
at org.hibernate.cfg.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:216)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2241)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:963)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:796)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3845)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3799)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1412)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857)
... 23 more
Comments
Post a Comment