
Hibernate主键生成策略详解:assigned、increment与hilo
下载需积分: 15 | 35KB |
更新于2024-09-08
| 165 浏览量 | 举报
收藏
"Hibernate主键生成策略详解"
在Hibernate框架中,主键生成策略是至关重要的,因为它决定了如何在数据库中创建唯一标识实体的主键。本文将深入探讨Hibernate的几种主键生成策略及其配置。
1、assigned策略
assigned策略意味着主键由应用程序本身负责生成。在使用Hibernate的Session.save()方法保存对象之前,必须通过setter方法为对象的主键字段赋值。由于主键生成完全由应用控制,这种策略与Hibernate和底层数据库系统无关,因此可以在不同数据库间迁移。然而,由于主键的生成过程不在Hibernate管理范围内,可能会导致并发控制问题,因此应尽量避免使用。
配置示例:
```xml
<id name="id" column="id">
<generator class="assigned"/>
</id>
```
2、increment策略
increment策略由Hibernate在内存中管理,每次新保存对象时,它会获取当前主键的最大值,并在此基础上加1生成新的主键。由于这种方式不依赖于数据库的序列或自增功能,所以可以跨数据库使用。然而,increment策略在多进程并发环境下存在隐患,因为多个JVM实例可能会同时读取到相同的主键最大值,导致主键冲突。因此,它更适合单进程环境,不适用于集群部署。
配置示例:
```xml
<id name="id" column="id">
<generator class="increment"/>
</id>
```
3、hilo策略
hilo策略是一种高低位算法,需要额外的表来存储高位(hi)值。当需要生成新的主键时,Hibernate会从这个表中获取hi值,结合一个低位(lo)值来生成较大的主键。这种方式可以跨数据库使用,且相比increment策略更安全,因为它能在多进程中并发工作。然而,需要维护额外的表,并且在初始化阶段需要确保至少有一条记录。
配置示例:
```xml
<id name="id" column="id">
<generator class="hilo">
<param name="table">hibernate_unique_key</param>
<param name="column">next_hi</param>
</generator>
</id>
```
除了上述策略,还有其他如identity(数据库自增)、sequence(基于数据库序列的策略,如Oracle)等。每种策略都有其适用场景和限制,开发者在选择时应根据项目需求和数据库特性进行评估。
4、identity策略
对于支持自动增长(如MySQL的 AUTO_INCREMENT 或 SQL Server 的 identity)的数据库,可以使用identity策略。Hibernate会在插入新记录时让数据库自动生成主键。
配置示例:
```xml
<id name="id" column="id">
<generator class="identity"/>
</id>
```
5、sequence策略
sequence策略适用于支持序列的数据库,如Oracle。Hibernate会通过数据库序列来生成主键。
配置示例:
```xml
<id name="id" column="id">
<generator class="sequence">
<param name="sequence">my_sequence</param>
</generator>
</id>
```
选择合适的主键生成策略是保证数据完整性和系统性能的关键。在设计数据库模型时,应充分考虑数据量、并发控制、跨数据库兼容性等因素,以选取最适合的策略。
相关推荐

















霸刀one
- 粉丝: 1
最新资源
- 开源lwgv:轻量级基因组可视化工具
- Fugu Tracker: 实现Web功能追踪及Chromium项目监控
- Ruby实现的Discourse VK登录插件发布
- CGH Construction Kit: 创造开源透射全息图软件
- RDP Classifier:快速准确的开源分类工具
- 简化.NET集合操作的Fluent.Extensions类库特性
- nohost:远程多人环境配置与抓包调试平台的构建与应用
- XYZreader: 时尚材料设计风格的创新RSS阅读器
- ANUGA开源流体建模软件介绍
- PHPschool.io快速搭建指南与本地开发流程
- Tailor开源工具:蛋白质结构模式搜索与几何测量
- Java多态在学校数据库项目中的应用
- react-pick-datetime:React日期时间选择器小部件详解
- Cinnamon桌面环境的香料插件介绍与安装指南
- jAudio:面向Java音频分析的开源特征提取工具
- Java实现简易扫一扫与相机预览界面图像数据获取
- MovieTime: 搜索和发现电影的智能应用
- 柏树视觉回归测试工具:简化图像差异比较
- 开源Super RTS游戏引擎的AI创新与人性化设计
- SpotifyListenAlong:Spotify音乐派对的创建与参与指南
- Zusi 3非官方路由模块的快速安装与使用指南
- notecase:面向小型团队的开源文档协作工具
- 易语言源码编译教程:创建个性化的远控程序
- Angular 11.0.3结合AdminLTE 3.1.0-rc启动项目快速入门指南