hibernate的表的映射

03章 单表映射

 

1 映射关系总览

单类→单表

②单向n1

③双向1n

11基于外键

11基于主键

⑥单向多对多

⑦双向多对多

 

2 对象关系映射文件

2.1 Hibernate使用*.hbm.xml文件定义持久化类和数据库表之间的映射关系,并以这个文件为依据生成各种SQL语句

2.2 映射关系

①持久化类:数据库表

②持久化类属性:数据库表中的字段

 

2.3 元素属性说明

<property>子元素用于设定持久化类与字段的映射关系主要包括nametypecolumnnot-null等属性
Name持久化对象的属性名
Column数据库的字段名
Type通常用来指定hibernate映射数据类型比如integerstringcharacterdatetimestampfloatobjectblob它是java类属性的数据类型与数据库字段数据类型的桥梁如果不进行类型设定hibernate它会使用反射来得到这个名字的属性以此来猜测正确的hibernate类型
Not-null属性中不能为空
Length属性的长度

 

 

3 Hibernate中主键生成方式

3.1 increment

①由Hibernate以递增的方式为代理主键赋值

Hibernate会先读取数据库表中的主键的最大值,插入记录时以最大值+1作为主键

③不依赖底层数据库系统,所以适合各种类型的数据库

④在多线程模式下运行时,很容易发生错误(多个线程可能获取数据库表中的主键的最大值相同,都以最大值+1作为主键向数据库表中插入记录,导致插入到数据库表中的多条记录的主键相同,从而违反了数据库表中主键的唯一性,故会报错)

OID必须为longintshort类型,如果为byte则会抛出异常

3.2 hilo

Hibernate根据high/low算法生成主键

3.3 identity

①由具体数据库负责生成主键

②要求数据库将主键定义为自动增长类型

③支持自增主键的数据库:MySQLDB2、微软SQLServerSybase等;

但是有局限性,因为Oracle不支持;

OID必须为longintshort类型,如果为byte则会抛出异常

 

3.4 sequence

①利用底层的数据库提供的序列生成标识符

②要求底层数据库支持序列:DB2Oracle

3.5 native

①依据底层数据库对自动生成标识符的支持能力,来选择使用identitysequencehilo

②由于native标识符生成器能够根据底层数据库系统的类型,自动选择合适的方式生成主键,所以非常适合跨数据库平台开发

OID必须为longintshort类型,如果为byte则会抛出异常

3.6 assigned(指定的)

Hibernate和数据库都不负责生成主键的值,完全由程序员自己指定。

3.7 其他主键生成方式

selectseqhiloforeignguid等等

                                                 

4 J

5 Hibernate映射类型对照表

Java类型

Hibernate映射类型

标准SQL类型

大小

java.lang.Integer/int

integer/int

INTEGER

4字节

java.lang.Long/long

long

BIGINT

8字节

java.lang.Short/short

short

SMALLINT

2字节

java.lang.Byte/byte

byte

TINYINT

1字节

java.lang.Float/float

float

FLOAT

4字节

java.lang.Double/double

double

DOUBLE

8字节

java.math.BigDecimal

big_decimal

NUMERIC

 

java.lang.Character/java.lang.String/char 

character

CHAR(1)

定长字符

java.lang.String

string

VARCHAR

变长字符

java.lang.Boolean/boolean

boolean/yes_no/true_false

BIT

布尔类型

java.util.Date/java.sql.Date

date

DATE

日期

java.util.Date/java.sql.Timestamp

timestamp

TIMESTAMP

日期

java.util.Calendar

calendar

TIMESTAMP

日期

java.util.Calendar

calendar_date

DATE

日期

byte[]

binary

BLOB

BLOB

java.lang.String

text

TEXT

CLOB

实现java.io.Serializable接口的任意Java

serializable

BLOB

BLOB

java.sql.Clob

clob

CLOB

CLOB

java.sql.Blob

blob

BLOB

BLOB

java.lang.Class

class

VARCHAR

定长字符

java.util.Locale

locale

VARCHAR

定长字符

java.util.TimeZone

timezone

VARCHAR

定长字符

java.util.Currency

currency

VARCHAR

定长字符

 

6 java中大对象类型的Hibernate映射

6.1 大对象

①长字符串:长度超过255的字符串

②二进制数据:图片、音频、视频等文件

 

6.2 使用Hibernate工具类创建大对象

FileInputStream in = new FileInputStream( "chain.jpg");

Blob photo = Hibernate.getLobCreator(session ).createBlob(in, in.available());

 

6.3 通过大对象获取输入流

InputStream in = blob.getBinaryStream();

 

 

 

 

附:MySQL中四种BLOB类型的最大范围

类型

大小

TinyBlob

255字节

Blob

65KB

MediumBlob

16MB

LongBlob

4GB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值