Hibernate内置标识符生成器

Hibernate允许把OID定义为short,int,long以及他们的包装类型。

Hibernate的内置标识符有以下几种:

 

increment适用于逻辑主键.由hibernate自动以递增方式生成.
identity适用于逻辑主键.由底层数据库生成标识符.
sequence适用于逻辑主键.hibernate根据底层数据库的序列生成标识符,这要求底层数据库支持序列.
hilo适用于逻辑主键.hibernate通过high/low算法生成标识符.
seqhilo适用于逻辑主键.使用一个高低位算法来高效地生成long,short,或者int类型的标识符.
native适用于逻辑主键.根据底层数据库对自动生成标识符的方式,自动选择identity,sequence,hilo.
uuid.hex适用于逻辑主键.hibernate采用128位的uuid算法生成标识符
uuid.string适用于逻辑主键.使用和uuid.hex同样的算法,uuid被编码成一个16字符长的字符串.不能使用在PostreSQL数据库中.
assigned适用于业务主键.由java应用程序负责生成标识符.
foreign适用于逻辑主键.使用另外一个相关联的对象的标识符

 

下面详细介绍几种常用的生成器。

1)Increment标识符生成器

   HIbernate会以自增的方式生成标识符,事实上是在hibernate的初始化阶段读取将要操作的表中的最大的ID(select max(ID) from tableName),在向数据库中插入记录时再在此基础上递增。

   这样就会存在并发的问题:如果同时有两个hibernate进程读取了这个最大值(假设为100),在向数据库中插入数据的时候都会想插入ID为101的记录,这样就违反了数据库的约束。这个问题只要是存在两个sessionFacotry就会发生,不能在集群下使用。

   优点:生成标识符的机制不依赖于底层数据库,适用于所有的数据库系统。

2)Identity标识符生成器

    identity标识符生成器由底层数据库来负责生成标识符,它要求底层数据库把主键定义为自动增长字段类型,比如在MySql中应为auto_increment,SQL Server中为identity。

    优缺点:必须依赖于底层数据库。

3)sequence标识符生成器

    sequence标识符生成器利用底层数据库提供的序列来生成标识符(需要在数据库中创建一个序列)。

4)Native标识符生成器

    native标识符生成器依据底层数据库对自动生成标识符的支持能力,来选择适用identity,sequence,hilo标识符生成器。native能自动判读底层数据库提供的生成符机制,如果为MySQL和SQL Server为identity,如果数据库为Oracle则为sequence。

5)assigned标识符生成器

    由程序指定OID。  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值