Hibernate映射類型分為兩種:內置的映射類型和客戶化映射類型。內置映射類型負責把一些常見的Java類型映射到相應的SQL類型;此外,Hibernate還允許用戶實現UserType或CompositeUserType接口,來靈活地定制客戶化映射類型
1.內置映射類型
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實例中。
1

2
Session session = sessionFactory.openSession();
3
Transaction tx = session.beginTransaction();
4
Customer customer = new Customer();
5
customer.setDescription(Hibernate.createClob("")); //先保存一個空的clob
6
session.save(customer);
7
session.flush();
8
//鎖定這條記錄
9
session.refresh(customer,LockMode.UPGRADE);
10
oracle.sql.CLOB clob = (oracle.sql.CLOB) customer.getDescription();
11
java.io.Writer pw = clob.getCharacterOutStream();
12
pw.write(longText);//longText是一個長度超過255的字符串
13
pw.close();
14
tx.commit();
15
session.close();
* 一個java類型對應多個Hibernate映射類型的場合。例如,如果持久化類的屬性為java.util.Date類型,對應的Hibernate映射類型可以是date,time
或timestamp。此時必須根據對應的數據庫表的字段的SQL類型,來確定Hibernate映射類型。如果字段為Date類型,則hibernate映射為datge,如果為TIME則為time,如果為TIMESTAMP則為timestamp。
2.客戶化映射類型
(很麻煩的一個東西,稍微看了看,日后需要再研究并總結)