高低算法

来源:互联网 发布:sql注入病毒的原理 编辑:程序博客网 时间:2024/04/29 04:49

1.hilo 和 seqhilo生成器给出了两种hi/lo算法的实现。
配置方式如下:

①hilo生成器

<id name="id" type="id" column="id">    <generator class="hilo">        <paramname="table">hibernate_unique_key</param>        <paramname="column">next_value</param>        <paramname="max_lo">100</param>    </generator></id>

②seqhilo生成器

<id name="id" type="long" column="cat_id">    <generator class="seqhilo">        <paramname="sequence">hi_value</param>        <paramname="max_lo">100</param>    </generator></id>

使用seqhilo生成器需要sequence的支持,下面我们只讨论更通用的hilo生成器。

2.hilo生成器默认请况下使用的表是hibernate_unique_key,默认字段叫作next_hi。
next_hi必须有一条记录否则会出现错误。

3.hi/lo算法中的几个基本概念:
①hi:高值——从数据库取得的那个值
②lo:低值——hibernate自动维护,取值1到max_low
③max_low:映射文件中配置的那个值

4.那hibernate怎样生成主键呢?
①从数据库中取得hi值,数据库的next_hi值加1
②hibernate取得lo值(0到max_lo-1循环,lo到max_lo时,执行步骤①得到+1后的next_hi值,然后lo继续从0到max_lo-1循环)
③根据下面的公式计算主键值:
hi*(max_lo+1)+lo;

5.例如hi初始为2,max_lo为3,按如下方式生成的主键:
①读取hibernate_unique_key表的next_hi列作为hi的值,现在是2,更新next_hi值为3,为下一次做准备。

2*(3+1)+0=82*(3+1)+1=92*(3+1)+2=102*(3+1)+3=11

②读取hibernate_unique_key表的next_hi列作为hi的值,现在是3。然后更新next_hi列的值为4,为下一次做准备。

3*(3+1)+0=123*(3+1)+1=13

③再下一次计算时,读取next_hi列作为hi值为4,hibernate_unique_key表的next_hi列的值变为5

4*(3+1)+0=16

④但是有一种特殊情况,就是hi是0的时候,那么第一个值不是0*(max_lo+1)+0=0而是跳过0,直接就是1

0 0
原创粉丝点击