1.assigned标识符生成器
assigned标识符生成器指定由应用程序生成并维护持久化对象的标识符。在这种情况下,标识符生成器使用应用程序分配给对象的标识符值。一般情况下,assigned生成器使用一个自然键(包含对象的业务属性)做主键。
assigned标识符生成器使用应用程序生成的标识符属性值,不涉及底层数据库实现细节,适合于各种数据库;持久化类的标识符可以采用任何Java支持的数据类型。但Hibernate不推荐使用assigned标识符生成器。因为assigned标识符生成器使用了包含业务信息的主键,系统扩展性不强。
2.increment标识符生成器
increment标识符生成器以递增的方式由Hibernate自行生成标识符属性值,增量为1。其中持久化类的标识符可以采用short、int和long数据类型以及它们的包装类。
increment适用于只有一个线程向数据库插入数据的情况,多个线程使用increment标识符生成器向同一数据库插入数据时,极易产生冲突,最终导致系统崩溃。虽然increment标识符生成器不依赖于数据库底层实现,适合于所有的数据库系统,但是只能局限于单个进程对同一数据库的操作,因而不推荐在生产环境中使用,尤其不推荐在集群中使用。
3.identify标识符生成器
identify标识符生成器根据数据库底层机制,实现主键地自动增长。主键的增长方式在生成数据库表时进行定义。不同的数据库实现自动增长的方式有所不同,因而主键的定义方式也有所不同。其中持久化类的标识符可以采用short、int和long数据类型以及它们的包装类型。
使用identify标识符生成器,需要依赖于底层数据库的主键生成机制。只要数据库支持自动增长的主键生成方式,就可以使用identify标识符生成器。Oracle不支持主键自动增长,identify标识符生成器不适合Oracle。
4.sequence标识符生成器
sequence标识符生成器使用序列获取主键,根据序列值保证主键的唯一性。序列是一个数据库对象,不依赖于特定的表,Hibernate根据底层数据库的序列生成标识符。其中持久化类的标识符可以采用short、int和long数据类型以及它们的包装类型。
使用sequence标识符生成器时,需要底层数据库具备生成序列的能力。只要数据库支持序列,就可以使用sequence标识符生成器。使用sequence标识符生成器时,需要注意一个问题:每次数据的插入,都会产生两条sql语句,第一条获取序列值,第二条才真正插入数据。MySQL和MS SQL Server不支持序列。
5.hilo标识符生成器
hilo标识符生成器由Hibernate使用high/low算法来生成标识符,它从数据库的特定表的字段中获取high值。其中持久化类的标识符可以采用short、int和long数据类型以及它们的包装类型。
由于high/low算法根据数据库的表由Hibernate负责生成主键值,不依赖于特定的数据库,所以hi/lo对象标识符生成器可以适用于所有的数据库。
6.uuid标识符生成器
uuid标识符生成器使用一个128位的全局唯一标识符(Universally Unique Identifier,UUID)算法生成字符串类型的标识符。UUID包含本机的IP地址、本机JVM的信息,相对于同一时空中的所有机器都是唯一的。uuid标识符生成器由Hibernate维护并生成uuid值,不依赖于底层数据库的实现细节,因而可以适用于所有数据库。
使用uuid标识符生成器需要注意以下的问题:由于UUID的值是完全随机的,因此在数据库中,不能确定记录的顺序。另外,uuid标识符生成器使用32位16进制字符串,需要占用更多的空间,索引的效率也比较低。
7.guid标识符生成器
guid包含当前日期、时间、时钟序列和全局唯一的IEEE机器识别号等,在全局是唯一的。
使用guid标识符生成器保存数据时,标识符生成器从数据库中获取guid作为对象标识符的值和记录的主键。使用guid需要底层数据库的支持。
8.native标识符生成器
native标识符生成器本身不具备生成主键的能力,是为了扩展hibernate的跨平台支持能力而引入的特性。native标识符生成器根据底层数据库的支持能力自动从identify、sequence和hilo三者之中选择合适的标识符生成器。如果底层数据库支持标识字段的主键,如MySQL数据库,native标识符生成器选择使用identify标识符生成器;如果底层数据库支持序列方式生成主键,如Oracle数据库,native标识符生成器将选择使用sequence标识符生成器。使用时,只需要设置generator元素的class属性为native,就可以使Hibernate具备跨平台的支持能力。
在支持序列的数据库中使用native标识符生成器时,如果Hibernate配置为启动时自动生成数据库模式,那么应用程序将自动生成序列hibernate_sequence,并在整个Hibernate应用中,共享序列hibernate_sequence。否则,需要手工创建序列,并在映射定义文件中指定序列的名称 。
常用数据库可使用的标识符生成器:
MySQL:identity、increment、hilo、native
MS SQL Server:identity、increment、hilo、native
Oracle:sequence、seqhilo、increment、hilo、native
跨平台开发:native
分享到:
相关推荐
1. Increment 标识符生成器:这种生成器适用于逻辑主键,它在 Hibernate 初始化时获取表中最大 ID,然后在插入新记录时递增。但这种方法不适用于多线程或分布式环境,因为可能会导致并发问题,即多个进程可能会同时...
#### Hibernate标识符生成器 Hibernate提供了多种内置的标识符生成策略,用于处理主键的生成: - **increment**: 自动递增策略,适用于代理主键,每次增加1,仅限于`long`, `int`, `short`类型。 - **identity**: ...
本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...
此外,我们还了解了Hibernate提供的多种标识符生成策略,这些策略可以帮助我们在不同的场景下更好地管理和使用对象标识符。 通过学习本教程,您应该能够理解对象标识符的基本概念,并能够在实际项目中有效地运用...
【标签】:“源码”和“工具”表明这篇内容可能涉及到具体的代码实现和辅助开发的工具,可能是通过某种代码生成器或者IDE插件来实现映射文件的自动化创建。 【压缩包子文件的文件名称列表】:“hibernate映射文件...
本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...
**4.1 Increment 标识符生成器** - Hibernate 会以自增的方式生成标识符。 - **优点**: 不依赖于底层数据库。 - **缺点**: 并发问题,不适合集群环境。 **4.2 Identity 标识符生成器** - 由底层数据库来负责生成...
4. **标识符(Id)**:对于主键字段,生成器会特别处理,标记为主键并配置相应的标识策略,如Identity、Sequence等。 5. **映射注解或XML配置**:根据选择,生成器会创建NHibernate所需的映射信息,包括表名、字段名...
6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 6.4.2 identity标识符生成器 6.4.3 sequence标识符生成器 6.4.4 hilo标识符生成器 6.4.5 native标识符生成器 6.5 映射自然主键 ...
主键生成器确保了每个记录都有一个独一无二的标识,这对于数据的完整性至关重要。以下是Hibernate中常见的主键生成方式及其特点: 1. **increment**:此策略对long、short或int类型的字段生成自动增长的主键。主键...
generator 是 Hibernate 中的一种生成器,用于生成唯一的标识符。generator 可以通过 Java 类或 XML 文件来定义。 composite-id composite-id 是 Hibernate 中的一种复合标识符,用于标识对象模型的唯一性。...
#### Hibernate内置标识符生成器 标识符生成器负责生成实体对象的主键值。Hibernate提供了多种内置的标识符生成策略,例如`increment`(递增)、`identity`(数据库自增)和`sequence`(序列)等。 #### ...
6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 6.4.2 identity标识符生成器 6.4.3 sequence标识符生成器 6.4.4 hilo标识符生成器 6.4.5 native标识符生成器 6.5 映射自然主键 ...
6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 6.4.2 identity标识符生成器 6.4.3 sequence标识符生成器 6.4.4 hilo标识符生成器 6.4.5 native标识符生成器 6.5 映射自然主键 ...
6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 6.4.2 identity标识符生成器 6.4.3 sequence标识符生成器 6.4.4 hilo标识符生成器 6.4.5 native标识符生成器 6.5 映射自然主键 ...
- **标识符生成**: 介绍了不同类型的标识符生成器,如序列、自增等。 - **复合主键**: 使用`composite-id`来处理复合主键的情况。 - **鉴别器**: 用于区分子类的字段。 - **版本控制**: 通过`version`元素来支持乐观...