Hibernate主键生成策略

主键增长策略

increment===自增,每次增加1,

主键类型是long。short,int才能自增

优点:不依赖于底层数据库,适用于所有数据库。

但是不要用在多进程。

select  max(id) from user


indentity==适用于mysql,sqlserver等,不支持orcle

主键类型是数值

由底层数据库生成标识符

前提条件:数据库支持自增长字段类型,比如mysql,sql server


sequence==

依赖于底层数据库系统的序列

前提条件:需要数据库支持序列机制,如orcle



hilo==高低位,由hibernate按照一种high/low算法生成的标识符

从数据库特定表中获取high值,需要创建额外的表(配置

之后,会在数据库自动生成这个表),

hilo生成方法不依赖于底层数据库,使用与任何数据库。

数值型





native==根据底层数据库类型,自动选择合适的策略

 包括identity,sequence或hilo的一种。

主键类型数值型


assigned==表示由应用程序逻辑来负责生成主键标识符

自己设置分配主键,

所以主键类型都可以


uuid==由hibernate基于128位唯一值产生算法,

根据当前的设备ip,时间,jvm启动时间,

内部自增量等4个参数生成16进制值作为主键,

主键类型==string类型  


foreign==在one-to-one关系中,

一个表的主键由另一个表的主键决定

<id name="cardId" column="cardId" type="int">
<generator class="foreign">
<param name="property">student</param>
</generator>
</id>




映射复合主键==尽量避免,不用复合的

1,数据不稳定

2,效率不好




主键策略使用原则


针对orcle==主键是int/short/long 建议使用sequence,

主键是string,建议使用uuid或者assigned


针对mysql==主键是int/short/long 建议使用 increment  assigned

  主键是字符串  使用uuid assigned


针对sql  server==主键是int/short/long 建议使用 indentity  assigned

  native   主键是字符串  使用uuid assigned





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值