hibernate主键常用的生成方式

1. increment

保存数据的时候hibernate会先发送一条select语句,查询数据库主键的最大值,再根据最大值,得到下一个主键,赋给对象。

注意:多个实例一起运行时不能使用此方法,因为线程安全问题,会出异常。(适用于测试环境,非生产环境)

2.identity

由底层数据库负责生成标识符,它要求底层数据库把主键定义为自动增长字段类型

注意:1.要求底层数据库必须支持自动增长字段类型。(DB2,MySQL,MSSQLServer,Sybase等都可以,Oracle不可以)

           2.OID必须定义为  long,int,short。

3.sequence

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

注意:1.要求底层数据库必须支持序列(DB2,Oracle)(MySQL不支持)

           2.OID必须定义为  long,int,short。

4.hilo(和 jpa 中的table有一点相似)

由hibernate根据 high/low 算法生成标识符,它从数据库特定的字段获取high值。  hibernate在持久化一个对象时,由hibernate负责生成主键值,hilo在生成标识符时,需读取并修改HI_TABLE中NEXT_VALUE的值。

 <generator class="hilo">
         <param name="table">HI_TABLE</param>
         <param name="column">NEXT_VALUE</param>
         <param name="max_lo">10</param>
 </generator>

注意:1.hilo生成标识符机制不依赖于底层数据库,因此它适合于所有的数据库。

           2.OID必须定义为  long,int,short。

5.nantive(类似JPA中的INDENTITY)(很常用)

根据底层数据库对自动生成标识符的支持能力,来选择使用identity,seqquence,或hilo 标识符生成器

注意:1.OID必须定义为  long,int,short。

6.uuid

采用128位的uuid算法生成主键,uuid被编码为一个32位16进制数字的字符串。

注意:1.主键为字符串类型

7.assigned(类似于jpa中的AUTO)

在插入数据的时候主键由程序处理

注意:这是 <generator>元素没有指定时的默认生成策略。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值