【hibernate】 常见的主键生成策略

来源:互联网 发布:高通一键开启写号端口 编辑:程序博客网 时间:2024/06/03 19:34

Assigned

         这个单词翻译过来有”指定,赋值”的意思,所以在主键策略中,使用这个主键生成器,我们需要自己去指定主键的值,而不是由hibernate自动生成。

Increment

         主键按顺序依次递增,当hibernate往数据库中插入数据时,会找到当前主键的最大值,然后在主键的最大值加1,作为当前数据的主键.但是当有多个进程要往数据库中插入数据时,可能会产生相同的主键,所以在集群下,最好不要使用。

Identity

         使用该生成机制,表示主键由数据库来维护.所以这个主键要设置为自增长类型。同时也数据库也要支持自增长类型。

Sequence

         采用数据库提供的sequence机制生成主键,需要数据库支持sequence。如oralce、DB、SAP DB、PostgerSQL、McKoi中的sequence。MySQL这种不支持sequence的数据库则不行(可以使用identity)。

Hibernate生成主键时,查找sequence并赋给主键值,主键值由数据库生成,Hibernate不负责维护,使用时必须先创建一个sequence,如果不指定sequence名称,则使用Hibernate默认的sequence,名称为hibernate_sequence,前提要在数据库中创建该sequence。该策略只能在支持序列的数据库中使用

Hilo

         通过hilo算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。使用高低位算法生成主键,高低位算法使用一个高位值和一个低位值,然后把算法得到的两个值拼接起来作为数据库中的唯一主键。

Native

        nativehibernate根据使用的数据库自行判断采用identityhilosequence其中一种作为主键生成方式,灵活性很强。如果能支持identity则使用identity,如果支持sequence则使用sequence

Forgien

         使用另一张表中的主键作为主键,大多在一对一关系中出现。

1 0
原创粉丝点击