@Temporal 注解用在类型为 java.util.Date 和 java.util.Calendar 的属性或字段上面,用来指定属性或字段的精度。该注解可以与 @Basic、@Id 或 @ElementCollection 注解一起使用。
@Temporal 注解只有一个 value 属性,该属性接收 TemporalType 枚举类型。TemporalType 枚举支持如下三个可选值:
DATE:映射到 java.sql.Date,只有日期;
TIME:映射到 java.sql.Time,只有时间;
TIMESTAMP:映射到 java.sql.Timestamp,日期+时间;
@Temporal 的用法:
// 映射为日期 date( 只有日期) @Temporal(TemporalType.DATE) // 映射为日期 time( 只有时间) @Temporal(TemporalType.TIME) // 映射为日期 datetime( 日期+时间) @Temporal(TemporalType.TIMESTAMP)
(1)假如我们创建拥有三个日期类型字段的用户表 users3,SQL 脚本如下:
CREATE TABLE `users3` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(255) DEFAULT NULL COMMENT '姓名', `age` int(10) unsigned DEFAULT NULL COMMENT '年龄', `birthday` datetime DEFAULT NULL, `birthday2` datetime DEFAULT NULL, `birthday3` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
(2)创建 users3 数据表对应的 Java 实体,代码如下:
import lombok.Data;
import javax.persistence.*;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
@Data
@Entity
@Table(name = "users3")
public class User12 {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column
private String name;
@Column
private Integer age;
// 日期
@Column
@Temporal(TemporalType.DATE)
private Date birthday;
// 时间
@Column
@Temporal(TemporalType.TIME)
private Time birthday2;
// 日期 + 时间
@Column
@Temporal(TemporalType.TIMESTAMP)
private Timestamp birthday3;
}(3)客户端代码,使用 EntityManager 实例查询 User12 实体数据。代码如下:
import com.alibaba.fastjson.JSONObject;
import com.huangx.openjpa.annotation.entity.User12;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import java.text.SimpleDateFormat;
import java.util.List;
public class OpenJpaDemo12 {
/**
* 持久化单元名称
*/
private static final String NAME = "openJPA";
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory(NAME);
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
// SELECT
String qlString = "select t from User12 t";
Query query = em.createQuery(qlString);
List<User12> userList = (List<User12>) query.getResultList();
for (User12 item : userList) {
System.out.println(JSONObject.toJSONString(item));
System.out.println("birthday=" + dateFormat.format(item.getBirthday()));
System.out.println("birthday2=" + dateFormat.format(item.getBirthday2()));
System.out.println("birthday3=" + dateFormat.format(item.getBirthday3()));
}
em.getTransaction().commit();
em.close();
emf.close();
System.out.println("finished.");
}
}运行客户端代码前,现在数据库中添加如下数据:

运行客户端代码,输出结果如下:
{"age":42,"birthday":328723200000,"birthday2":52763000,"birthday3":328804763000,"id":1,"name":"张三丰"}
birthday=1980-06-02 00:00:00.000
birthday2=1970-01-01 22:39:23.000
birthday3=1980-06-02 22:39:23.000