Hibernate学习之主键增长策略

主键增长策略
对象标识符(OID object id)
从表的角度看,OID对应表的主键。从类的角度看OID对应类的主键属性.

increment:
由Hibernate自动以递增方式生成标识符,每次增量为1。
select max(id) from Student
优点:不依赖于底层数据库系统,适用于所有的数据库系统。
缺点:适用于单进程环境下,在多线程环境下很可能生成相同主键值,而且OID必须为数值类型,比如long,int,short类型
配置方式:
<id name=“id” type=”long” column=”ID”>
    <generator class=”increment”/>
</id>

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

sequence:
依赖于底层数据库系统的序列
前提条件:需要数据库支持序列机制(如:oracle等),而且OID必须为数值类型,比如long,int,short类型。
配置文件:
<id name=”id” type=”java.lang.Long” column=”ID”>
    <generator class=”sequence”>
           <param name=”sequence”>my_seq</param>
    </generator>
</id>

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算法生成标识符,他从数据库中的特定表的字段中获取high值,因此需要额外的数据库表保存主键生成的历史状态,hilo生成方法不依赖于底层数据库,因此适用于每一种数据库,但是OID必须为数值类型(long,int,shor类型)。
用法:
<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

hibernate最佳实践(在什么项目中使用最好)
对于数据量大,性能要求高系统,不太使用使用hiberante.
主要用于事务操作比较多的项目(oa/某个行业软件[石油、税务、crm, 财务系统.]
不适合OLAP(On-Line Analytical Processing联机分析处理),以查询分析数据为主的系统;
适合OLTP(on-line transaction processing联机事务处理)
olap->hibernate用的比较少   oltp->hibernate

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值