Hibernate-Java-SQL 類型映射表 及Hibernate標識建置原則

來源:互聯網
上載者:User

一、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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.