Java數據類型 | Hibernate數據類型 | 標準SQL數據類型 (PS:對於不同的DB可能有所差異) |
byte、java.lang.Byte | byte | TINYINT |
short、java.lang.Short | short | SMALLINT |
int、java.lang.Integer | integer | INGEGER |
long、java.lang.Long | long | BIGINT |
float、java.lang.Float | float | FLOAT |
double、java.lang.Double | double | DOUBLE |
java.math.BigDecimal | big_decimal | NUMERIC |
char、java.lang.Character | character | CHAR(1) |
boolean、java.lang.Boolean | boolean | BIT |
java.lang.String | string | VARCHAR |
boolean、java.lang.Boolean | yes_no | CHAR(1)('Y'或'N') |
boolean、java.lang.Boolean | true_false | CHAR(1)('Y'或'N') |
java.util.Date、java.sql.Date | date | DATE |
java.util.Date、java.sql.Time | time | TIME |
java.util.Date、java.sql.Timestamp | timestamp | TIMESTAMP |
java.util.Calendar | calendar | TIMESTAMP |
java.util.Calendar | calendar_date | DATE |
byte[] | binary | VARBINARY、BLOB |
java.lang.String | text | CLOB |
java.io.Serializable | serializable | VARBINARY、BLOB |
java.sql.Clob | clob | CLOB |
java.sql.Blob | blob | BLOB |
java.lang.Class | class | VARCHAR |
java.util.Locale | locale | VARCHAR |
java.util.TimeZone | timezone | VARCHAR |
java.util.Currency | currency | VARCHAR |
PS:映射 Java 的時間, 日期類型
1). 兩個基礎知識:
I. 在 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 類型對應
II. 在標準 SQL 中, DATE 類型表示日期, TIME 類型表示時間, 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 映射類型.