7.4 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 类型表示时间戳, 同时包含日期和时间信息.
Hibernate type (org.hibernate.type package) JDBC type Java type BasicTypeRegistry key(s)
TimestampType TIMESTAMP java.sql.Timestamp timestamp, java.sql.Timestamp
TimeType TIME java.sql.Time time, java.sql.Time
DateType DATE java.sql.Date date, java.sql.Date
CalendarType TIMESTAMP java.util.Calendar calendar, java.util.Calendar
CalendarDateType DATE java.util.Calendar calendar_date
CalendarTimeType TIME java.util.Calendar calendar_time
  • 如何进行映射

    1. 因为java.util.Date是java.sql.Date java.sql.Time java.sql.Timestamp的父类,所以java.util.date可以对应比好准SQL中的 DATE, TIME 和 TIMESTAMP 类型对应
    2. 所以建议大家将持久化类中的时间类型定义为java.util.Date
  • 如何把 java.util.Date 映射为 DATE, TIME 和 TIMESTAMP ?

可以通过 property 的 type 属性来进行映射:

例如:

  1. <property name="date" type="timestamp">
  2. <column name="DATE" />
  3. </property>
  4. <property name="date" type="data">
  5. <column name="DATE" />
  6. </property>
  7. <property name="date" type="time">
  8. <column name="DATE" />
  9. </property>

其中 timestamp, date, time 既不是 Java 类型, 也不是标准 SQL 类型, 而是 hibernate 映射类型.

如果没有指定type,那么就会默认使用Date类型(即对应时间又对应日期)