hibernate提供了很多种主键的生成方式,以解决实际开发中各种不同的数据库以及其主键的策略,以前的时候,也有用过很多种,但是都不全面,这次在书上看到了,便记录下来,方便以后查看,使用。
1.Assigned:主键有应用的逻辑产生,数据经由hibernate保存时,主键值以设置完毕,无需hibernate干预。
2.hilo:通过hi/lo算法,实现主键生成机制,需要额外的数据库表保存记录主键生成的历史状态。
3.seqhilo:类似于hilo,也是通过算法,实现主键生成机制,但是无需额外表保存,而是保存在seqence中,此中策略适用于支持seqence的数据库,如oracle等。
4.increment:主键按数值顺序递增。即当前应用中维持了一个变量,以保存当前的最大值,之后每次生成主键,即在上次的数值上加一。这种方式的问题在于,假使有多个实例访问数据库,由于各个实例的主键状态,以及可能生成的同样的主键,以导致主键重复异常,因此,如果有多个实例访问的情况下,需避免使用。
5.identity:采用数据库提供的主键生成机制,如sql server,mysql中的自动增长机制,
6.sequence:采用数据提供的sequence机制生成主键,如oracle sequence。
7.native:由hibernate根据数据库适配器中的定义(即数据库dialect指定的数据库,自动采用identity,hilo,sequence这三种中的一种方式,作为主键生成方式)
8.uuid.hex:由hibernate基于128位唯一算法,根据当前设备ip,时间,jvm启动时间,内部自动增量等4个参数,生成16进制数值,作为主键,这种算法最大程度保证了id的唯一性,几时在多实例并发运行的情况下,也基本不会出现重复。假使真有重复,即设备ip,时间,jvm启动时间,内部增量都相同,那也需要几万年才能出现一次......所以,此方式提供了最好的数据库插入性能和数据库平台适应性。
9.uuid.string:于uuid.hex类似,只是在某些数据库中会出现问题,如PostgreSQL。
10.foreign:使用外部表的字段作为主键。
11.select:hibernate3中新引入的主键机制,主要针对遗留系统改造。因为在早期的一些项目中,主键可能是依赖触发器的捕获操作,来生成主键的。此时,就需要设置为select方式,配置事例为:
<generator class="select">
<param name="key">key_field</param>
</generator>
全部的11种全在这里了,由于常用数据库如sqlserver,mysql都提供自动增长,那我们一般可以选择native方式生成主键。不过使用数据提供的机制有时候并不是最好的,在大量并发insert的时候,可能会出现表之间的互锁情况,从而降低整个系统的性能。
另外,sequence作为主键机制的一种,如oracle中,每插入一条数据,hibernate需先向数据库放松一条获取sequence的语句,以得到sequence,从而获取主键的值。这样虽然不会出现问题,但是在高并发的insert情况下,还是对性能有一定的影响。
所以在大多数情况下,假使我们的逻辑允许,可以采用uuid.hex方式生成主键。
分享到:
相关推荐
关于Hibernate的各种主键生成策略与配置详解
以下是关于Hibernate主键生成方式的详细说明: 1. **Identity方式**:`<generator class="identity"/>` 这种方式依赖于数据库自身的自动增长机制。例如,在MySQL中,它可以与`AUTO_INCREMENT`属性配合使用。当...
以上就是Hibernate主键生成的常见策略,每种策略都有其适用的场景。在实际开发中,应根据数据库类型和需求选择合适的主键生成策略,确保数据的一致性和完整性。理解并正确配置这些策略,将有助于提高程序的稳定性和...
一种优化的主键生成方式,使用较小的整数范围(高位数)和数据库表中的行(低位数)来生成主键,减少对数据库的访问。使用`<generator class="hilo">`。 理解并正确选择主键生成策略对于优化数据库性能、保证数据...
在 Hibernate 中,主键生成策略主要包括以下几种: 1. **native** - **描述**:对于不同的数据库,`native` 策略会采用不同的主键生成方式。例如,在 Oracle 数据库中使用 Sequence 方式;而对于 MySQL 和 SQL ...
【hibernate主键生成策略】是Hibernate框架中用于生成持久化对象主键的重要机制,它决定了如何在数据库中创建唯一的标识符。在SSH(Spring、Struts、Hibernate)架构中,Hibernate作为持久层框架,主键生成策略的...
在Hibernate中,主键生成策略主要包括以下几种: - **identity**:由数据库自动分配一个唯一值,适用于支持自增字段的数据库如MySQL。 - **sequence**:使用数据库提供的序列生成主键,适用于Oracle等数据库。 - **...
Hibernate各种主键生成策略详解,包括 assigned increment hilo seqhilo sequence identity native uuid foreign uuid.hex sequence-identity 等
在Hibernate框架中,提供了多种主键生成策略,每种策略都有其适用场景。本文将详细介绍这些生成策略,并给出相应的应用场景分析。 #### 二、主键生成策略 1. **assigned** - **定义**:这种方式由程序员负责分配...
1主键常用的生成策略 2对数据库的依赖性总结 3关于主键生成策略的选择 详细解释
Native策略是一种智能选择策略,Hibernate会根据当前使用的数据库类型自动选择最合适的主键生成策略,如identity、sequence或hilo。这种方式的最大优点是灵活性和兼容性,开发者无需关心底层数据库的细节,可以专注...
本文是讲解的是hibernate3.2的主键生成方式,通过annotation来实现,详细的分析了主键在hibernate的生成以及在真实项目的运用。。。。
在Java的持久化框架Hibernate中,一对一(OneToOne)关系是一种常见的对象关系映射(ORM)配置,用于表示两个实体类之间的一种唯一关联。在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来...
### 常用Hibernate主键生成策略详解 #### 一、引言 在数据库设计与操作过程中,主键是确保数据唯一性的关键要素之一。在实际应用中,开发者经常需要处理不同类型的数据库,并且需要应对各种不同的主键生成需求。...
以下是对Hibernate主键生成策略的详细说明: 1. **assigned**: 这种策略要求用户在调用`save()`方法之前手动设置主键值。Hibernate不参与主键的生成,这意味着主键生成完全由应用控制,可以与数据库无关。这种...