1. 程式人生 > >hibernate Java 時間和日期型別的 Hibernate 對映

hibernate Java 時間和日期型別的 Hibernate 對映

基礎知識:

在 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 型別表示時間戳, 同時包含日期和時間資訊.


如何進行對映?

1.因為java.util.Date是 java.sql.Date, java.sql.Time 和 java.sql.Timestamp的父類,所以java.util.Date可以對應標準sql型別中的DATE,TIME和TIMESTAMP
2.基於1,所以在設定持久化類的Date型別時設定為java.util.Date,因為這個型別可以與hibernate中三種日期型別都對應 3.如何把java.util.Date對映為DATE,TIME,和TIMESTAMP?
可以通過property的type型別進行對映,例如: <property name="date" type="time">
<column name="DATE" />
</property>
<property name="date" type="data">
      <column name="DATE" />
</property>
<property name="date" type="timestamp">
<column name="DATE" />
</property>

使用 Hibernate 內建對映型別

以下情況下必須顯式指定 Hibernate 對映型別

一個 Java 型別可能對應多個 Hibernate 對映型別. 例如: 如果持久化類的屬性為 java.util.Date 型別, 對應的 Hibernate 對映型別可以是 date, time 或 timestamp. 此時必須根據對應的資料表的欄位的 SQL 型別, 來確定 Hibernate 對映型別. 如果欄位為 DATE 型別, 那麼 Hibernate 對映型別為 date; 如果欄位為 TIME 型別, 那麼 Hibernate 對映型別為 time; 如果欄位為 TIMESTATMP 型別, 那麼 Hibernate 對映型別為 timestamp.