hibernate主键生成策略
2017-02-02 13:53
253 查看
下面介绍几种常见常用的Hibernate主键生成策略。
【1、assigned】
主键由外部程序负责生成,在save()之前必须指定一个。hibernate不负责维护主键生成。与Hibernate和底层数据库都无关。在存储对象前,必须要使用主键的setter方法给主键赋值。
【2、increment】
由Hibernate从数据库中取出主键的最大值,以该值为基础,每次增量为1,在内存中生成主键,不依赖于底层的数据库,因此可以跨数据库。
【3、sequence】
采用数据库提供的sequence机制生成主键,需要数据库支持sequence。(如,oracle、DB、SAP DB等,MySql不支持sequence)Hibernate生成主键时,查找sequence并赋给主键值,主键值由数据库生成,Hibernate不负责维护,使用时,必须先创建一个sequence。
【4、identity】
identity由底层数据生成标识符。identity是由数据库自己生成的,但这个主键必须设置为自增长,使用identity前提条件是底层数据支持自动增长字段类型,
【5、native】
native由Hibernate根据只用的数据自行判断采用identity、sequence其中一种作为主键生成方式,灵活性很强。
【6、uuid】
UUID:Universally Unique Identifier是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。
【7、guid】
GUID:Globally Unique Identifier全球唯一标识符,也称作UUID,是一位128位长的数字。
【8、foreign】
使用另外一个相关联的对象的主键作为该对象的主键。主要用于一对一关系中。
【9、select】
使用触发器生成主键(主要用于早期的数据库主键生成机制,很少使用)
【重点概述】
【1、assigned】
主键由外部程序负责生成,在save()之前必须指定一个。hibernate不负责维护主键生成。与Hibernate和底层数据库都无关。在存储对象前,必须要使用主键的setter方法给主键赋值。
<id name="id" column="id"> <generator class="assigned" /> </id>特点:可以跨数据库,人为控制主键生成,应尽量避免。
【2、increment】
由Hibernate从数据库中取出主键的最大值,以该值为基础,每次增量为1,在内存中生成主键,不依赖于底层的数据库,因此可以跨数据库。
<id name="id" column="id"> <generator class="increment" /> </id>特点:跨数据库,不适合多进程并发更新数据库,适合单一进程访问数据库,不能用于集成环境。
【3、sequence】
采用数据库提供的sequence机制生成主键,需要数据库支持sequence。(如,oracle、DB、SAP DB等,MySql不支持sequence)Hibernate生成主键时,查找sequence并赋给主键值,主键值由数据库生成,Hibernate不负责维护,使用时,必须先创建一个sequence。
<generator class="sequence"> <param name="sequence">hibernate_id</param> </generator> <param name="sequence">hibernate_id</param> 指定sequence的名称
【4、identity】
identity由底层数据生成标识符。identity是由数据库自己生成的,但这个主键必须设置为自增长,使用identity前提条件是底层数据支持自动增长字段类型,
<id name="id" column="id"> <generator class="identity" /> </id>特点:只能用在支持自动增长的字段数据库中使用。
【5、native】
native由Hibernate根据只用的数据自行判断采用identity、sequence其中一种作为主键生成方式,灵活性很强。
<id name="id" column="id"> <generator class="native" /> </id>特点:根据数据库自动选择,项目中如果用到了多个数据库时,可以使用这种方式,使用时需要设置表的自增字段或建立序列、建立表等。
【6、uuid】
UUID:Universally Unique Identifier是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。
<id name="id" column="id"> <generator class="uuid" /> </id>特点:uuid长度大,占用空间大,跨数据库,不用访问数据库就生成主键值,所以效率高且能保证唯一性,移植非常方便。
【7、guid】
GUID:Globally Unique Identifier全球唯一标识符,也称作UUID,是一位128位长的数字。
<id name="id" column="id"> <generator class="guid" /> </id>特点:需要数据库支持查询uuid,生成时需要查询数据库,效率没有uuid高。
【8、foreign】
使用另外一个相关联的对象的主键作为该对象的主键。主要用于一对一关系中。
<generator class="foreign"> <param name="property">user</param> </generator> </id> <one-to-one name="user" class="domain.User" constrained="true" />特点:大多用在一对一关系中。
【9、select】
使用触发器生成主键(主要用于早期的数据库主键生成机制,很少使用)
【重点概述】
主键生成策略 | 主要特性 |
---|---|
increment | 代理主键,适合用于所有数据库,由Hibernate维护主键自增,和地城数据库无关,但是不适合两个或两个以上的Hibernate 进程 |
identity | 代理主键,适合于mysql等支持自增的数据库,主键值不由Hibernate维护 |
sequence | 代理主键,适合于oracle等支持序列的数据库,主键值不由Hibernate维护,由序列产生。 |
native | 代理主键,根据底层数据库的具体特性选择合适的主键生成策略。 |
assigned | 适合应用程序维护的自然主键 |
... | ...... |
相关文章推荐
- Hibernate 生成主键的几种策略
- hibernate 主键生成策略介绍
- Hibernate 主键生成策略
- 扩展hibernate的主键生成策略
- hibernate主键生成策略(2)
- Hibernate 主键生成策略
- Hibernate 的三种主键生成策略
- hibernate主键生成策略之sequence
- hibernate笔记(三) Hibernate标识符属性(主键)生成策略全析
- hibernate 主键 生成策略详解
- 基于annotation的hibernate主键生成策略
- 基于按annotation的hibernate主键生成策略
- hibernate 主键生成策略解释--通俗易懂
- Hibernate 学习笔记-1-3(Hibernate的基本映射以及几种主键生成策略的测试)
- hibernate主键的生成策略
- Hibernate 主键生成策略
- 基于按annotation的hibernate主键生成策略
- Hibernate 主键生成策略
- hibernate主键生成策略(1)
- hibernate 主键生成策略