hibernate的主键增长策略

① increment

自增,每次增长1, 适用于所有数据库. 但是不要使用在多进程,主键类型是数值型

select max(id) from Student

② identity

自增,每次增长1, 适用于支持identity的数据(mysql,sql server), 主键类型是数值

③ sequence

④ native

会根据数据类型来选择,使用identity,sequence ,hilo

select hibernate_sequence.nextval from dual

主键类型是数值long , short ,int

<id name="id" type="java.lang.Integer">

<generator class="native"/>

</id>

⑤ hilo

hilo标识符生成器由Hibernate按照一种high/low算法生成标识符

用法:

<id name=”id” type=”java.lang.Integer” column=”ID”>

  <generator class=”hilo”>

   <param name=”table”>my_hi_value</param>

   <param name=”column”>next_value</param>

  </generator>

</id>

⑥ uuid

会根据uuid算法,生成128-bit的字串

主键属性类型不能是数值型,而是字串型

⑦ assigned

用户自己设置主键值,所以主键属性类型可以是数值,字串

⑧ 映射复合主键

⑨ foreign

one-to-one的关系中,有另一张表的主键(Person) 来决定 自己主键/外键( IdCard)

 

给出一个简单原则:

针对oracle [主键是int/long/short 建议使用 sequence] 主键是String 使用uuid或者assinged

针对 mysql [主键是 int/long/short 建议使用increment/assigend ,如果是字串 UUId/assigned]

针对 sql server [主键是 int/long/short 建议使用 identity/native/assinged ,如果主键是字串,使用uuid/assigned ]

 

one-to-one 又是基于主键的则使用foreign

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值