Hibernate主键生成策略
2011-05-04 22:49
218 查看
自然主键:具有业务意义的字段作为主键,例如学生表中用学号作为主键
代理主键:定义的、专门用来标记记录的ID,它除了用来标识记录外,不具有
任何的业务意义
代理主键:定义的、专门用来标记记录的ID,它除了用来标识记录外,不具有
任何的业务意义
ID生成器名称 | 说明 |
assigned | 应用程序自身对id赋值。当设置<generator class="assigned"/>时,应用程序自身需要负责主键id的赋值,一般应用在主键为自然主键时。例如XH为主键时,当添加一个学生信息时,就需要程序员自己设置学号的值,这时就需要应用该id生成器。 |
native | 由数据库对id赋值。当设置<generator class="native"/>时,数据库负责主键id的赋值,最常见的是int型的自增型主键。例如,在SQL Server中建立表的id字段为identity,配置了该生成器,程序员就不用为该主键设置值,它会自动设置。 |
hilo | 通过hi/lo算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。 |
seqhilo | 与hi/lo类似,通过hi/lo算法实现的主键生成机制,只是主键历史状态保存在sequence中,适用于支持sequence的数据库,如Oracle。 |
increment | 主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一个数据库有多个实例访问,这种方式应该避免使用。 |
identity | 采用数据库提供的主键生成机制,如SQL Server、MySQL中的自增主键生成机制。 |
sequence | 采用数据库提供的sequence机制生成主键,如Oracle sequence |
uuid.hex | 由Hibernate基于128位唯一值产生算法,根据当前设备IP、时间、JVM启动时间、内部自增量等4个参数生成十六进制数值(编码后长度为32位的字符串表示)作为主键。即使是在多实例并发运行的情况下,这种算法在最大程度上保证了产生id的唯一性。当然,重复的概率在理论上依然存在,只是概率比较小。一般而言,利用uuid.hex方式生成主键将提供最好的数据插入性能和数据平台适应性。 |
uuid.string | 与uuid.hex类似,只是对生成的主键进行编码(长度为16位)。在某些数据库中可能出现问题。 |
foreign | 使用外部表的字段作为主键。该主键一般应用在表与表之间的关系上,会在后面的表对应关系上进一步讲解。 |
select | Hibernate 3新引入的主键生成机制,主要针对遗留系统的改造工程。 |
相关文章推荐
- Hibernate主键生成策略
- hibernate的主键生成策略
- Hibernate主键生成策略
- hibernate主键生成策略generator
- Hibernate的主键的生成策略
- Hibernate之ID主键生成策略
- Hibernate主键生成策略
- Hibernate的主键生成策略
- Hibernate-主键生成策略汇总
- annotation的hibernate主键生成策略
- Hibernate-Annotation常用的注解归总&&ID的生成策略&&联合主键
- Hibernate标识符属性(主键)生成策略全析
- Hibernate 表映射 主键生成策略与复合主键
- 扩展hibernate的主键生成策略
- 基于annotation的hibernate主键生成策略
- Hibernate的学习之路九(主键的生成策略)
- Hibernate各种主键生成策略与配置详解
- Hibernate主键生成策略
- hibernate主键生成策略
- Hibernate主键生成策略