hilo是hibernate中最长用的一种生成方式,hibernate给出了hilo 和 seqhilo两种生成器,他们的分别向下面一样配置
<id name="id" type="int" column="id">
<generator class="hilo">
<param name="table">wasw100_hilo_tbl</param>
<param name="column">next_value</param>
<param name="max_lo">100</param>
</generator>
</id>
<id name="id" type="int" column="id">
<generator class="seqhilo">
<param name="sequence">hi_value</param>
<param name="max_lo">100</param>
</generator>
</id>
seqhilo生成器需要数据库对sequence的支持,这里只讨论更通用的hilo生成器。
如果你按照下面的方式配置
<generator class="hilo">
<param name="max_lo">100</param>
</generator>
这样的缺省配置对应的数据库表是:hibernate_unique_key,对应的数据库字段是:next_hi。next_hi必须有一条记录否则会出现错误。
讨论前先说明几个简写的意义,以最上面那个配置为例:
hi: 高值--从数据库wasw100_hilo_tbl读取的next_value值
lo: 低值--hibe自动维护,从0到max_lo(看下面)
max_lo: 配置文件中<param name="max_lo">100</param>的值,这里是100
hibernate根据hilo生成器生成主键的过程:
1.读取并记录数据库的wasw100_hilo_tbl表中next_value字段的值,数据库中此字段值加1保存
2.hibernate取得lo值(0到max_lo-1循环,lo到max_lo时,执行步骤1,然后lo继续从0到max_lo循环)
取得hi值和lo值后,根据下面的公式计算主键值:
hi*(max_lo+1)+lo;
例如:
hi初始为2,max_lo为3
生成的值依次是:
读取hi为2,写到数据库为3
2*(3+1)+0=8
2*(3+1)+1=9
2*(3+1)+2=10
2*(3+1)+3=11
这有次读写表wasw100_hilo_tbl操作,hi变为3,数据库成为4
3*(3+1)+0=12
3*(3+1)+1=13
关闭数据库,下次打开时,读取hi值为4,数据库变为5
4*(3+1)+0=16
但是有一种特殊情况,就是hi是0的时候,那么第一个值不是0*(max_lo+1)+0=0
而是lo跳过0从1开始,直接是1、2、3……
那max_lo配置多大合适呢?
这要根据具体情况而定,如果系统一般不重启,而且需要用此表建立大量的主键,可以吧max_lo配置大一点,这样可以减少读取数据表wasw100_hilo_tbl的次数,提高效率;反之,如果服务器经常重启,可以吧max_lo配置小一点,可以避免每次重启主键之间的间隔太大,造成主键值主键不连贯。
分享到:
- 2009-09-19 16:56
- 浏览 4125
- 评论(2)
- 论坛回复 / 浏览 (2 / 7530)
- 查看更多
相关推荐
Hibernate各种主键生成策略详解,包括 assigned increment hilo seqhilo sequence identity native uuid foreign uuid.hex sequence-identity 等
* generator 指定生成主键使用的生成器(可能是orcale中的序列)。 * @SequenceGenerator —— 注解声明了一个数据库序列。该注解有如下属性 * name 表示该表主键生成策略名称,它被引用在@GeneratedValue中设置的...
Hilo高低位算法,实现编号自动递增,完整示例代码,适应分布式环境
6.4.4 hilo标识符生成器 6.4.5 native标识符生成器 6.5 映射自然主键 6.5.1 映射单个自然主键 6.5.2 映射复合自然主键 6.6 小结 6.7 思考题 第7章 映射一对多关联关系 7.1 建立多对一的单向关联关系...
Hilo 是阿里巴巴集团开发的一款HTML5跨终端游戏解决方案
如果你的项目只需要适配对canvas和css3支持度良好的高级浏览器或者webview,你可以直接使用Hilo基础渲染器。 如果需要适配不支持canvas的终端,只需要简单的引入一个Flash Shim模块即可详细的信息请看这里。Hilo...
08_ibatis教程_sql主键生成方式.rar
本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...
HILO的驱动WIN7。用于音频系统,他是国外一款 音频驱动
6.4.4 hilo标识符生成器 6.4.5 native标识符生成器 6.5 映射自然主键 6.5.1 映射单个自然主键 6.5.2 映射复合自然主键 6.6 小结 6.7 思考题 第7章 映射一对多关联关系 7.1 建立多对一的单向关联关系...
6.4.4 hilo标识符生成器 6.4.5 native标识符生成器 6.5 映射自然主键 6.5.1 映射单个自然主键 6.5.2 映射复合自然主键 6.6 小结 6.7 思考题 第7章 映射一对多关联关系 7.1 建立多对一的单向关联关系...
6.4.4 hilo标识符生成器 6.4.5 native标识符生成器 6.5 映射自然主键 6.5.1 映射单个自然主键 6.5.2 映射复合自然主键 6.6 小结 6.7 思考题 第7章 映射一对多关联关系 7.1 建立多对一的单向关联关系...
Hilo HTML5互动游戏引擎 v2.0.2.zip
指标 HiLo Activator Profi
3D-Hilo3d.zip,webgl渲染引擎,3D建模使用专门的软件来创建物理对象的数字模型。它是3D计算机图形的一个方面,用于视频游戏,3D打印和VR,以及其他应用程序。
生成器-hilo 由Yeeoman Generator创建的Hilo游戏项目模板安装首先,使用安装和 (我们假设您已经预安装了 )。 npm install -g yonpm install -g generator-hilo 然后生成新的Hilo游戏项目: yo hilo 运行gulp来构建...
HiLo Activator指标。
本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...
跨端HTML5游戏开发解决方案Hilo.zip,A Cross-end HTML5 Game development solution developed by Alibaba Group