主键生成策略(转)

数据库表主键的知识点:

Generator 为每个 POJO 的实例提供唯一标识。

一般情况,我们使用“native”。class 表示采用由生成器接口net.sf.hibernate.id.IdentifierGenerator 实现的某个实例,其中包括:

assigned

主键由外部程序负责生成,在 save() 之前指定一个。

hilo

通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。

seqhilo

hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle

increment

主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集羣下使用。

identity

采用数据库提供的主键生成机制。如DB2SQL ServerMySQL 中的主键生成机制。

sequence

采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence

native

 Hibernate 根据使用的数据库自行判断采用 identityhilosequence 其中一种作为主键生成方式。

uuid.hex

 Hibernate 基于128  UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。

uuid.string

uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据库中。

Foreign

使用另外一个相关联的对象的标识符作为主键。

点赞