Hibernate主键生成策略详解:assigned、increment与hilo
需积分: 4 48 浏览量
更新于2024-09-08
收藏 74KB DOC 举报
`hibernate.hilo.table`>hibernate_hilo</param>
</generator>
</id>
Hibernate使用高位+低位的方式生成主键,高位是保存在内存中的一个较大的整数,低位则是根据高位计算出来的较小的整数。高位在系统启动时从数据库的hi/lo表中读取,低位在内存中生成。这种方式减少了对数据库的访问,因为每次只需要修改或读取hi表的一条记录。但是,由于依赖于内存中的状态,如果服务器重启,需要重新初始化高位。适用于单数据库应用,不适用于分布式环境。
4、identity主键由数据库自动生成,如MySQL的自动增长字段,SQL Server的IDENTITY字段。这种方式依赖于数据库特性,不可跨数据库。
<id name="id" column="id">
<generator class="identity"/>
</id>
在插入数据时,数据库会自动分配一个唯一的主键值。对于支持此特性的数据库,如MySQL和SQL Server,这是个简单且高效的解决方案。但不适用于所有数据库,例如Oracle不支持此方式。
5、sequence在支持序列的数据库(如Oracle、PostgreSQL)中,使用序列生成主键。序列在数据库中预先定义,每次调用时返回一个新值。
<id name="id" column="id">
<generator class="sequence">
<param name="sequence">my_sequence</param>
</generator>
</id>
序列生成器允许你在数据库级别控制主键的生成,这在数据库迁移和集群环境中很有用。
6、native Hibernate会选择最适合当前数据库的策略,如MySQL使用identity,PostgreSQL使用sequence,而其他不支持这些特性的数据库则使用increment。
<id name="id" column="id">
<generator class="native"/>
</id>
这种方式方便了跨数据库的移植,但可能因数据库特性不同导致主键生成方式的变化,可能带来潜在问题。
7、uuid.hex生成一个128位的UUID,转换为16进制表示,共32个字符。
<id name="id" column="id">
<generator class="uuid.hex"/>
</id>
UUID是全局唯一的,适合分布式环境,但其长度较长,可能影响数据库列的宽度。
8、uuid二进制形式的UUID,长度较短,但不便于在SQL语句中直接使用。
<id name="id" column="id">
<generator class="uuid"/>
</id>
总结:Hibernate的主键生成策略选择应基于数据库类型、并发需求以及是否需要跨数据库移植等因素。assigned策略灵活性最高,但可能导致主键冲突;increment策略适合单一进程;hilo策略减少数据库交互,但需额外表;identity和sequence依赖特定数据库;native策略自动适应;uuid适用于分布式环境。开发者应根据实际项目需求来选择合适的主键生成策略。
2011-10-26 上传
2009-06-18 上传
2011-10-26 上传
2017-12-01 上传
点击了解资源详情
2024-11-09 上传
厌学的小骚年
- 粉丝: 5
- 资源: 4
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章