Hibernate主键生成战略类型的使用说明[hibernate generator strategy]ITeye - 威尼斯人

Hibernate主键生成战略类型的使用说明[hibernate generator strategy]ITeye

2019-01-12 14:11:35 | 作者: 宣朗 | 标签: 主键,生成,类型 | 浏览: 977

1) assigned  [转让主键生成权]
主键由外部程序担任生成,无需Hibernate参加。

2) hilo 
经过hi/lo 算法完成的主键生成机制,需求额定的数据库表保存主
键生成前史状况。

3) seqhilo
与hilo 相似,经过hi/lo 算法完成的主键生成机制,仅仅主键前史
状况保存在Sequence中,适用于支撑Sequence的数据库,如Oracle。

4) increment
主键按数值次序递加。此办法的完成机制为在当时运用实例中保持
一个变量,以保存着当时的最大值,之后每次需求生成主键的时分
将此值加1作为主键。
这种办法或许发生的问题是:假如当时有多个实例拜访同一个数据
库,那么因为各个实例各自保护主键状况,不同实例或许生成相同
的主键,然后形成主键重复反常。因而,假如同一数据库有多个实
例拜访,此办法有必要防止运用。

5) identity
选用数据库供给的主键生成机制。如DB2、SQL Server、MySQL
中的主键生成机制。

6) sequence
选用数据库供给的sequence 机制生成主键。如Oralce 中的
Sequence。

7) native
由Hibernate依据底层数据库自行判别选用identity、hilo、sequence
其间一种作为主键生成办法。

8) uuid.hex
由Hibernate依据128 位仅有值发生算法生成16 进制数值(编码后
以长度32 的字符串表明)作为主键。

9) uuid.string
与uuid.hex 相似,仅仅生成的主键未进行编码(长度16)。在某些
数据库中或许出现问题(如PostgreSQL)。

10) foreign
运用外部表的字段作为主键。
一般来说,运用uuid.hex办法生成主键将供给最好的功用和数据库渠道适
应性。

别的因为常用的数据库,如Oracle、DB2、SQLServer、MySql 等,都提
供了易用的主键生成机制(Auto-Increase 字段或许Sequence)。咱们能够在数
据库供给的主键生成机制上,选用generator- >不过值得注意的是,一些数据库供给的主键生成机制在功率上未必最佳,
很多并发insert数据时或许会引起表之间的互锁。
数据库供给的主键生成机制,往往是经过在一个内部表中保存当时主键状
态(如关于自增型主键而言,此内部表中就保护着当时的最大值和递加量),
之后每次刺进数据会读取这个最大值,然后加上递加量作为新记载的主键,之
后再把这个新的最大值更新回内部表中,这样,一次Insert操作或许导致数据
库内部屡次表读写操作,一起随同的还有数据的加锁解锁操作,这对功用发生
了较大影响。
因而,关于并发Insert要求较高的体系,引荐选用uuid.hex 作为主键生成
机制。

 

网摘弥补:

 

1、假如主键字段为自增类型。
那么对应的.hbm.xml文件中的id字段的xml声明,
应该这么写:
generator /
例如:
id
column="user_id"
name="Id"
type="integer"

generator /
/id
其实这个native并非实践的类型,而是hiberante依据
当时运用的数据库,主动运用对应的类型。
例如:假如sqlserver,native就对应identity
见Hiberante参阅:
native(本地)
依据底层数据库的才干挑选identity, sequence 或许hilo中的一个。

2、假如主键字段不设置为自增,可是是int型的。
能够运用increment,由hibernate发生主键。
generator /
不过这种办法,关于并发量大的运用,好像最好不要选用。
见hiberante参阅:
increment(递加)
用于为long, short或许int类型生成仅有标识。只要在没有其他进程往同一张表中刺进数据时才干运用。
在集群下不要运用。

3、假如运用uuid.hex发生的随机32位数最为主键。
那么数据库的id字段类型为char,长度为32
hbm.xml中写为: generator /
别的,uuid.string也是功用相似。
uuid.hex发生的是32位的16进制数字的字符串。
而uuid.string发生的是16个字符长的恣意ASCII字符组成的字符串
见参阅:
uuid.hex
用一个128-bit的UUID算法生成字符串类型的标识符。在一个网络中仅有(运用了IP地址)。UUID被编码为一个32位16进制数字的字符串。
uuid.string
运用相同的UUID算法。UUID被编码为一个16个字符长的恣意ASCII字符组成的字符串。不能运用在PostgreSQL数据库中.

 

转自:

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表威尼斯人立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章