•
在
Java
中
,
代表时间和日期的类型包括
:
java.util.Date
和
java.util.Calendar
.
此外
,
在
JDBC API
中还提供了
3
个扩展了
java.util.Date
类的子类
:
java.sql.Date
,
java.sql.Time
和
java.sql.Timestamp
,
这三个类分别和标准
SQL
类型中的
DATE,TIME
和
TIMESTAMP
类型对应
•
在标准
SQL
中
, DATE
类型表示日期
, TIME
类型表示时间
,TIMESTAMP
类型表示时间戳
,
同时包含日期和时间信息
.
•
以下情况下必须显式指定
Hibernate
映射类型
–
一个
Java
类型可能对应多个
Hibernate
映射类型
.
例如
:
如果持久化类的属性为
java.util.Date
类型
,
对应的
Hibernate
映射类型可以是
date, time
或
timestamp.
此时必须根据对应的数据表的字段的
SQL
类型
,
来确定
Hibernate
映射类型
.
如果字段为
DATE
类型
,
那么
Hibernate
映射类型为
date;
如果字段为
TIME
类型
,
那么
Hibernate
映射类型为
time;
如果字段为
TIMESTATMP
类型
,
那么
Hibernate
映射类型为
timestamp.
2). 如何进行映射 ?
I. 因为 java.util.Date 是 java.sql.Date, java.sql.Time 和 java.sql.Timestamp 的父类, 所以 java.util.Date
可以对应标准 SQL 类型中的 DATE, TIME 和 TIMESTAMP
II. 基于 I, 所以在设置持久化类的 Date 类型是, 设置为 java.util.Date.
III. 如何把 java.util.Date 映射为 DATE, TIME 和 TIMESTAMP ?
可以通过 property 的 type 属性来进行映射:
例如:
<property name="date" type="timestamp">
<column name="DATE" />
</property>
<property name="date" type="data">
<column name="DATE" />
</property>
<property name="date" type="time">
<column name="DATE" />
</property>
其中 timestamp, date, time 既不是 Java 类型, 也不是标准 SQL 类型, 而是 hibernate 映射类型