一、Hibernate-Java-SQL的類型映射表
圖片版(易於查看):
表格版(方便複製粘貼):
| Hibernate基本類型 |
JAVA類型 |
標準SQL欄位類型 |
大小/描述 |
| big_decimal |
Java.math.BigDecimal |
NUMERIC |
精度數值(8位) |
| binary |
Byte[] |
VARBINARY,BLOB |
變長位元據 |
| blob |
Java.sql.Blob |
BLOB |
位元據 |
| boolean |
boolean/java.lang.Boolean |
BIT |
布爾類型 |
| byte |
byte/java.lang.Byte |
TINYINT |
1位元組 |
| calender |
Java.util.Calendar |
TIMESTAMP |
長日期(YYYYMMDDHHMMSS) |
| calender_date |
Java.util.Calendar |
Date |
短日期(YYYY-MM-DD) |
| character |
java.lang.Character/java.lang.String/char |
CHAR(1) |
定長字元 |
| class |
Java.lang.Class |
VARCHAR |
變長字元 |
| clob |
Java.sql.Clob |
CLOB |
CLOB |
| currency |
Java.util.Currency |
VARCHAR |
定長字元 |
| date |
Java.util.Date/java.sql.Date |
DATE |
日期 |
| double |
double/java.lang.Double |
DOUBLE |
8位元組 |
| float |
float/java.lang.Float |
FLOAT |
4位元組 |
| interger |
int/java.langInteger |
INTEGER |
4位元組 |
| local |
Java.util.Locale |
VARCHAR |
變長字元 |
| long |
long/java.lang.Long |
BIGINT |
8位元組 |
| seralizable |
Java.io.Serializable及其之類 |
VARBINARY,BLOB |
變長位元據 |
| short |
short/java.lang.Short |
SMALLINT |
2位元組 |
| string |
Java.lang.String |
VARCHAR |
變長字元 |
| text |
Java.lang.String |
CLOB |
字元大對象 |
| time |
Java.util.Date/java.sql.Time |
TIME |
時間(HH:MM:SS) |
| timestamp |
Java.util.Date/java.sql.TimeStamp |
TIMESTAMP |
短日期(YYYY-MM-DD) |
| timezone |
Java.util.Timezone |
VARCHAR |
變長字元 |
| true_false |
boolean/java.langBoolean |
Char(1)( ' T ' / ' F ' ) |
布爾類型 |
| yes_no |
boolean/java.lang.Boolean |
Char(1)( ' Y '/ ' N ' ) |
布爾類型 |
| 備忘:1.考慮到操作 blob 的欄位太複雜一個變換的技巧是 . 實體類用 byte[] 類型 , hibernate 類型用 binary ,資料庫還是用 blob .這樣可以簡化一些操作; 2.type 是String類型,因為在java中沒有text類型,mysql中的varchar類型欄位和text類型欄位在java的對應檔和javaBean中都是String,只不過長度會有限制,一般text類型的欄位在java對應檔中的限制長度是65535 |
一、Hibernate標識建置原則
圖片版(方便查看):
表格版(方便複製粘貼):
| 標識符產生器 |
描述 |
| increment(遞增) |
適用於代理主鍵。由Hibernate自動以遞增方式產生。用於為long, short或者int類型天生唯一標識。只有在沒有其他進程往同一張表中插進資料時才能使用。在叢集下不要使用。 |
| identity |
適用於代理主鍵。由底層資料庫產生標識符。對DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的內建識別欄位提供支援。返回的標識符是long, short 或者int類型的。 |
| sequence(序列) |
適用於代理主鍵。Hibernate根據底層資料庫的序列產生標識符,這要求底層資料庫支援序列。在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),而在Interbase中使用天生器(generator)。返回的標識符是long, short或者 int類型的。 |
| hilo(高低位) |
適用於代理主鍵。Hibernate分局high/low演算法產生標識符。使用一個高/低位演算法來高效的天生long, short或者 int類型的標識符。給定一個表和欄位(預設分別是是hibernate_unique_key 和next_hi)作為高位值得來源。高/低位演算法天生的標識符只在一個特定的資料庫中是唯一的。在使用JTA獲得的串連或者使用者自行提供的串連中,不要使用這種天生器。 |
| seqhilo(使用序列的高低位) |
適用於代理主鍵。使用一個高/低位演算法來高效的天生long, short或者 int類型的標識符,給定一個資料庫序列(sequence)的名字。 |
| uuid.hex |
適用於代理主鍵。Hibernate採用128位的UUID演算法產生字串類型的標識符。在一個網路中唯一(使用了IP地址)。UUID被編碼為一個32位16進位數位字串。 |
| uuid.string |
適用於代理主鍵。UUID被編碼成一個16字元長的字串。使用了與上面一樣的UUID演算法。UUID被編碼為一個16個字元長的任意ASCII字元組成的字串。不能使用在PostgreSQL資料庫中。 |
| native(本地) |
適用於代理主鍵。根據底層資料庫對自動產生標識符的方式,自動選擇identity、sequence或hilo中的一個。 |
| assigned(程式設定) |
適用於自然主鍵。由Java應用程式負責產生標識符。讓應用程式在save()之前為對象分配一個標示符。 |
| foreign(外部參考) |
適用於代理主鍵。使用另外一個相關聯的對象的標識符。 |
| select |
hibernate3中新增的。需要提供一個唯一的識別欄位進行二次讀取,以擷取觸發器天生的主索引值,通過param子項目進行定義。該方法主要針對遺留系統的改造工程,一些早期的系統主鍵依靠於觸發器天生。當資料庫insert時,觸發器捕捉這一操縱,並為主鍵賦值,在插進資料庫後,再次讀取某一識別欄位讀取已經插進的資料,擷取其主索引值。 |
備忘:複合主鍵映射 < composite-id > < key-property ? column = "USERID" ? name = "userid" ? type = "java.lang.String" ></ key-property > < key-property ? column = "WHEN" ? name = "when" ? type = "java.sql.Date" ></ key-property > </ composite-id > 複合主鍵的POJO類需要實現equals和hashcode方法,可以使用apache commons lang包中的工具類實現(commons-lang.jar)三、Java 時間和日期類型的 Hibernate 映射
hibernate映射類型 |
Java 類型 |
標準 SQL 類型 |
描述 |
date |
util.Date 或者 sql.Date |
DATE |
YYYY-MM-DD |
time |
Date Time |
TIME |
HH:MM:SS |
timestamp |
Date Timestamp |
TIMESTAMP |
YYYYMMDDHHMMSS |
calendar |
calendar |
TIMESTAMP |
YYYYMMDDHHMMSS |
calendar_date |
calendar |
DATE |
YYYY-MM-DD |
|