hibernate中identity和increment区别

本文详细介绍了多种主键生成策略,包括由底层数据库生成标识符的identity、由Hibernate管理自动递增的increment等,并对每种策略的特点及适用场景进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

identity:由底层数据库生成标识符。identity 是由数据库自己生成的,但这个主键必须设置为自增长,前提条件是低层数据库支持自动增长字段类型


increment:由hibernate管理主键,自动以递增的方式生成标识符,每次增量为1。其在每次插入前取 得一个当前最大的id+1作为主键,该主键必须为Integer类型

附:

“assigned”
主键由外部程序负责生成,在 save() 之前指定一个。



“hilo”
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源



“seqhilo”
与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence, 适用于支持 Sequence 的数据库,如Oracle。



“increment”
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加 1作为主键。这种方式可能产生的问题是:不能在集群下使用。



“identity”
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生 成机制。



“sequence”
采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。



“native”
Hibernate 根据使用的数据库自行判断采用 identity、 hilo、sequence 其中一种作为主键生成方式。



“uuid.hex”
Hibernate 基于128 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为 主键。



“uuid.string”
与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据库中。



“foreign”
使用另外一个相关联的对象的标识符作为主键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值