Hibernate 映射xml中的属性类型

本文详细介绍了Hibernate的内置映射类型,包括JAVA基本类型、时间和日期类型、Java大对象类型及部分Java自带类的映射类型,以及如何处理MySQL不支持的标准SQL CLOB类型。

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

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值