Hibernate 對映xml中的屬性型別

TS南郭先生發表於2016-03-23

Hibernate的內建對映型別

   1 JAVA基本型別(包括它們的包裝類)和Hibernate對映型別

Hibernate

Java型別

標準SQL型別

大小和取值範圍

integer/int

int/java.lang.Integer

integer

4位元組,-2^31~2^31-1

long

long/java.lang.Long

bigint

8位元組, -2^63~2^63-1

short

short/java.lang.Short

smallint

2位元組, -2^15~2^15-1

byte

byte/java.lang.Byte

tinyint

1位元組, -128~127

flat

float/java.lang.Float

float

4位元組,  單精度浮點數

double

double/java.lang.Double

double

8位元組, 雙精度浮點數

big_decimal

java.math.BigDecimal

numeric

用法:numeric(8,2)

character

char/…Character/…String

char(1)

定長字元

string

java.lang.String

varchar

變長字串

boolean

boolean/java.lang.Boolean

bit

布林型別

yes_no

boolean/java.lang.Boolean

char(1)(‘Y’/’N’)

布林型別

true_false

boolean/java.lang.Boolean

char(1)(‘T’/’F’)

布林型別

 

 

1. <property name="author" type="java.lang.String">  

2.     <column name="author" length="20" not-null="true" />  

3. </property>  


 

 

   2 JAVA時間和日期型別的Hibernate對映型別

對映型別

java型別

標準SQL型別

描述

date

java.util.Date/java.sql.Date

date

日期,形式:yyyy-mm-dd

time

java.util.Date/java.sql.Time

time

時間,形式:hh:mm:ss

timestamp

…Date/java.sql.Timestamp

timestamp

形式:yyyymmddhhmmss

calendar

java.util.Calendar

timestamp

時間和日期,形式同上

calendar_date

java.util.Calendar

date

日期,形式:yyyy-mm-dd

在標準SQL中,DATE表示日期(2005-01-09),TIME表示時間(11:46:54),TIMESTAMP表示時間戳,包含日期和時間資訊(20050109114654),如果沒有顯式插入,由系統自動新增當前系統時間

   3 Java大物件型別的Hibernate對映型別

對映型別

Java型別

標準SQL型別

描述

binary

byte[]

varbinary/blob

存放二進位制數

text

java.lang.String

clob

字串大物件

serializable

實現java.io.Serializable介面的類

varbinary/blob

 

clob

java.sql.Clob

clob

字串大物件

bolb

java.sql.Blob

blob

二進位制大物件

MySQL不支援標準SQL的CLOB型別。

通過Hibernate來儲存java.sql.Clob或java.sql.Blob例項時,發須包含兩個步驟:

(1)    在一個資料庫事務中先儲存一個空的Blob或Clob例項

(2)    鎖定記錄,更新上一步儲存的Bolb或Clob例項,把二進位制數或長文字寫進去,如:

[java] view plaincopy 

1. Customer customer=new Customer();  

2. customer.setDescription(Hibernate.createClob(“”));//儲存一個空的Clob例項  

3. session.save(customer);  

4. session.flush();  

5. session.refresh(customer,LockMode.UPGRADE);//鎖定記錄  

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

7. java.io.Writer pw=clob.getCharacterOutputStream();  

8. pw.write(longText);//lognText變數表示長度超過255的字串  

9. pw.close();  

10. tx.commit();  

11. session.close();  

以上不用java.sql.Blob和java.sql.Clob處理JAVA大對有以下兩個原因:

(1)    Blob和Clob例項只有在一個資料庫事務中才有效

(2)    有些資料庫的JDBC驅動程式不支援java.sql.Blob或java.sq.Clob。如果在Java應用中處理圖片或長檔案的二進位制數用byte[]比java.sql.Blob方便;如果處理長度超過255的字串java.lang.String比java.sql.Clob更方法

  JDK自帶的個別JAVA類的Hibernate對映型別

對映型別

Java型別

標準SQL型別

class

java.lang.Class

VARCHAR

locale(現場)

java.util.Locale

VARCHAR

timezone(地區)

java.util.TimeZone

VARCHAR

currency(流通)

java.utilCurrency

VARCHAR

 

相關文章