简述Hibernate主键生成策略

HIbernate的主键类型有很多种,下面给大家介绍六种常见的主键类型

1.assigned:

    assigned主键由外部程序生成,在save()之前必须指定一个。assigned主键类型与HIbernate和底层数据库都无关,所以可以跨数据库操作。assigned在存储对象面前,必须使用主键的setter方法进行赋值,至于这个值怎么生成完全由自己决定,不建议使用。

2.identity:

   identity主键类型由底层数据库自己生成,但是必须设为自动增长类型。使用identity主键的前提条件就是数据库支持自动增长字段类型,例如SQLServer,MySql,DB2,Sybase等。Oracle不支持自动增长字段类型,则不能使用identity主键类型。

3.sequence:

   sequence主键类型是采用数据库提供的sequence机制生成的主键,需要数据库支持sequence类型,例如Oracle,DB,SAP DB,PostgerSQL,Mckoi等,而MySql不支持sequence类型。

4.increment:

    increment主键类型由Hibernate向数据库获取最大值(每个session获取以一次),以这个最大值为基础,每次增量加1,生成主键,不依赖于数据库,可以进行跨数据库操作。

5.uuid:

    uuid是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字

UUID由以下几部分的组合:

(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。

(2)时钟序列。

(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。

UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。

6.native:

   native主键类型由Hibernate根据使用数据库自行判断采用identity,sequence,Hilo其中一种作为主键生成方式,灵活性很强。

7.guid :

    全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID 的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0。所以,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。

GUID一词有时也专指微软对UUID标准的实现。

在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如注册表项、类及接口标识、数据库、系统目录等对象。

   

猜你喜欢

转载自blog.csdn.net/qq_42245219/article/details/82430381