- Hibernate 教程
- Hibernate - 首页
- ORM - 概述
- Hibernate - 概述
- Hibernate - 架构
- Hibernate - 环境
- Hibernate - 配置
- Hibernate - 会话
- Hibernate - 持久化类
- Hibernate - 映射文件
- Hibernate - 映射类型
- Hibernate - 示例
- Hibernate - O/R 映射
- Hibernate - 级联类型
- Hibernate - 注解
- Hibernate - 查询语言
- Hibernate - Criteria 查询
- Hibernate - 原生 SQL
- Hibernate - 缓存
- Hibernate - 实体生命周期
- Hibernate - 批量处理
- Hibernate - 拦截器
- Hibernate - ID 生成器
- Hibernate - 保存图片
- Hibernate - log4j 集成
- Hibernate - Spring 集成
- Hibernate - Struts 2 集成
- Hibernate - Web 应用
- 映射表示例
- Hibernate - 表继承策略(每个层次结构一张表)
- Hibernate - 表继承策略(每个具体类一张表)
- Hibernate - 表继承策略(每个子类一张表)
- Hibernate 有用资源
- Hibernate - 常见问题解答
- Hibernate - 快速指南
- Hibernate - 有用资源
- Hibernate - 讨论
Hibernate - ID 生成器
生成器类用于为对象生成 ID,该 ID 将成为数据库表的 primary key。所有生成器类都实现 **org.hibernate.id.IdentifierGenerator** 接口。可以通过实现上述接口并覆盖 **generator(SharedSessionContractImplementor sess, Object obj)** 方法来创建自己的生成器类。
查看下面的 employee.hbm.xml 文件片段
<hibernate-mapping> <class name="com.mypackage.Employee" table="emp"> <id name="id"> <generator class="assigned"></generator> </id> ... </hibernate-mapping>
生成器类的类型
**Hibernate** 提供了许多预定义的 **生成器** 类。Hibernate 中一些重要的预定义生成器类包括:
**assigned** - 此生成器指示应用程序将分配 primary key 值。在这种情况下,Hibernate 不会生成任何值。
**identity** - 此生成器使用数据库的自增功能来生成 primary key 值。它适用于大多数数据库,并且适用于简单的用例。Oracle 不支持 identity 生成器。MySQL、MS SQL Server、DB2 等支持此功能。
**sequence** - 此生成器使用数据库序列来生成 primary key 值。在某些情况下,它提供了比 identity 更好的性能和控制。
创建序列的命令
create sequence <sequence_name> start with <number> increment by <number>
**注意** - MySQL 不支持序列。Oracle 支持序列。
employee.hbm.xml 中的条目
<hibernate-mapping> <class name="com.mypackage.Employee" table="emp"> <id name="id"> <generator class=”sequence”> <param name=”sequence”>datasource_name</param> </generator> </id> ... </hibernate-mapping>
**increment** - 此生成器通过递增存储在内存中的值来生成 primary key 值。
**hilo** - 此生成器使用高低算法来生成 primary key 值。它结合了 sequence 和 increment 的优点。
**uuid** - 此生成器生成通用唯一标识符 (UUID) 作为 primary key 值。它适用于需要唯一 ID 的分布式系统。
**native** - 此生成器将 primary key 生成策略委托给底层数据库。如果底层数据库支持 identity,则选择 identity。否则,选择 sequence 或 hilo。它根据数据库方言选择最佳策略。
**foreign** - 此生成器使用另一个关联实体的 primary key 值作为当前实体的 primary key 值。
使用注解生成 ID
我们可以使用 IDENTITY 生成器注解来生成 ID 字段。请参见下面的示例
@Entity public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // ... other fields }