Hibernate映射類型分為兩種:內置的映射類型和客戶化映射類型。內置映射類型負責把一些常見的Java類型映射到相應的SQL類型;此外,Hibernate還允許用戶實現UserType或CompositeUserType接口,來靈活地定制客戶化映射類型
1.內置映射類型
1).Java基本類型的Hibernate映射類型
2). Java時間和日期類型的Hibernate映射類型
* 當程序類型為java.sql.Timestamp, 數據庫中表屬性類型為timestamp的情況下,即使用戶以空值插入數據,數據庫系統仍然會自動填充timestamp的值
3). Java 大對象類型的Hibernate映射類型
* 在應用程序中通過Hibernate來保存java.sql.Clob或者java.sql.Blob實例時,必須包含兩個步驟:
a. 在一個數據庫事務中先保存一個空的Blob或Clob實例;b. 接著鎖定這條記錄,更新在步驟(1)中保存的Blob或Clob實例,把二進制數據或長文本數據寫到Blob或Clob實例中。
* 一個java類型對應多個Hibernate映射類型的場合。例如,如果持久化類的屬性為java.util.Date類型,對應的Hibernate映射類型可以是date,time
或timestamp。此時必須根據對應的數據庫表的字段的SQL類型,來確定Hibernate映射類型。如果字段為Date類型,則hibernate映射為datge,如果為TIME則為time,如果為TIMESTAMP則為timestamp。
2.客戶化映射類型
(很麻煩的一個東西,稍微看了看,日后需要再研究并總結)
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 |
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();


2

3

4

5

6

7

8

9

10

11

12

13

14

15

* 一個java類型對應多個Hibernate映射類型的場合。例如,如果持久化類的屬性為java.util.Date類型,對應的Hibernate映射類型可以是date,time
或timestamp。此時必須根據對應的數據庫表的字段的SQL類型,來確定Hibernate映射類型。如果字段為Date類型,則hibernate映射為datge,如果為TIME則為time,如果為TIMESTAMP則為timestamp。
2.客戶化映射類型
(很麻煩的一個東西,稍微看了看,日后需要再研究并總結)