Hibernate幾種映射類型

在我們學習Hibernate時就知道,Hibernate映射類型分爲兩種:Hibernate內置的映射類型和Hibernate客戶化映射類型。
內置映射類型負責把一些常見的Java類型映射到相應的SQL類型;此外,Hibernate還允許用戶實現UserType或CompositeUserType接口,來靈活地定製客戶化映射類型
1.Hibernate內置映射類型
1).Java基本類型的Hibernate映射類型
 

Java 類型
Hibernate 映射類型
標準 SQL 類型
大小和取值範圍
int/Integer
int/integer
INTEGER
4Byte
long/Long   
long
BIGINT
8Byte
short/Short
short
SAMLLINT
2Byte
byte/Byte
byte
TINYINT
1Byte
float/Float
float
FLOAT
4Byte
double/Double
double
DOUBLE
8Byte
BigDecimal
big_decimal
NUMBERIC
Numeric(8,2)
char/Character/String
character
CHAR(1)
定長字符
String
string
VARCHAR
變長字符
boolean/Boolean
boolean
BIT
布爾類型
boolean/Boolean
yes/no
CHAR(1)('Y'/'N')
布爾類型
boolean/Boolean
true/false
CHAR(1)('T'/'F')
布爾類型
2). Java時間和日期類型的Hibernate映射類型
 

Java 類型
Hibernate 映射類型
標準 SQL 類型
描述
java.util.Date/java.sql.Date
date
DATE
日期, yyyy-mm-dd
java.util.Date/java.sql.TIme
time
TIME
時間, hh : mm : ss
java.util.Date/java.sql.Timestamp
timestamp
TIMESTAMP
時間戳, yyyymmddhhmmss
java.util.Calendar
calendar
TIMESTAMP
同上
java.util.Calendar
calendar_date
DATE
日期 yyyy - mm - dd
當程序類型爲java.sql.Timestamp, 數據庫中表屬性類型爲timestamp的情況下,即使用戶以空值插入數據,數據庫系統仍然會自動填充timestamp的值
3). Java 大對象類型的Hibernate映射類型
 

Java 類型
Hibernate 映射類型
標準 SQL 類型
MySql 類型
Oracle 類型
byte[]
binary
VARBINARY/BLOB
BLOB
BLOB
String
text
CLOB
TEXT
CLOB
serializable
實現 serializable 接口的一個 java 類
VARBINARY/BLOB
BLOB
BLOB
java.sql.Clob
clob
CLOB
TEXT
CLOB
java.sql.Blob
blob
BLOB
BLOB
BLOB
在應用程序中通過Hibernate來保存java.sql.Clob或者java.sql.Blob實例時,必須包含兩個步驟:
a. 在一個數據庫事務中先保存一個空的Blob或Clob實例;
b. 接着鎖定這條記錄,更新在步驟(1)中保存的Blob或Clob實例,把二進制數據或長文本數據寫到Blob或Clob實例中。

Session session = sessionFactory.openSession();

Transaction tx = session.beginTransaction();

Customer customer = new Customer();

customer.setDescription(Hibernate.createClob(""));

//先保存一個空的clobsession.save(customer);

session.flush(); //鎖定這條記錄

session.refresh(customer,LockMode.UPGRADE);

oracle.sql.CLOB clob = (oracle.sql.CLOB) customer.getDescription(); j

ava.io.Writer pw = clob.getCharacterOutStream();

pw.write(longText);//longText是一個長度超過255的字符串

pw.close(); tx.commit();

session.close();

 

 

一個java類型對應多個Hibernate映射類型的場合。例如,如果持久化類的屬性爲java.util.Date類型,對應的Hibernate映射類型可以是date,time或timestamp。此時必須根據對應的數據庫表的字段的SQL類型,來確定Hibernate映射類型。如果字段爲Date類型,則hibernate映射爲datge,如果爲TIME則爲time,如果爲TIMESTAMP則爲timestamp。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章