Hibernate 中的 IdentifierGenerator

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-class=native的主键生成方式。不过值得注意的是,一些数据库提供的主键生成机制在效率上未必最佳,


大量并发insert数据时可能会引起表之间的互锁。数据库提供的主键生成机制,往往是通过在一个内部表中保存当前主键状态(如对于自增型主键而言,此内部表中就维护着当前的最大值和递增量), 之后每次插入数据会读取这个最大值,然后加上递增量作为新记录的主键,之后再把这个新的最大值更新回内部表中,这样,一次Insert操作可能导致数据库内部多次表读写操作,同时伴随的还有数据的加锁解锁操作,这对性能产生了较大影响。 因此,对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成机制。


如果需要采用定制的主键生成算法,则在此处配置主键生成器,主键生成器须实现org.hibernate.id.IdentifierGenerator 接口

 

关键词: Hibernate  主键   主键生成方式  IdentifierGenerator

 

转载于:https://www.cnblogs.com/jadmin/archive/2011/09/25/2205921.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: identifiergenerator是一个标识符生成器,用于生成唯一的标识符。它可以用于各种场景,例如数据库表的主键生成、分布式系统的唯一ID生成等。它可以根据不同的算法和策略生成不同类型的标识符,例如UUID、Snowflake等。在实际应用,我们可以根据具体的需求选择合适的标识符生成器来生成唯一的标识符。 ### 回答2: identifiergenerator是一个标识符生成器,用于生成唯一的标识符。 在计算机编程,标识符是用来唯一标识某个实体的名称。在许多应用,我们需要为不同的实体生成唯一的标识符,以便对它们进行识别和区分。 identifiergenerator可以通过使用不同的算法或规则来生成标识符。这些算法和规则可以确保生成的标识符在给定的环境是唯一的。 例如,一个常见的标识符生成器可以使用GUID(全局唯一标识符)算法来生成标识符。GUID是一个128位的数字,通常以32个十六进制字符的形式表示。由于GUID算法的特性,生成的标识符几乎可以保证在所有计算机系统是唯一的。 标识符生成器还可以根据应用的需求来自定义规则。例如,可以使用当前日期和时间结合某种编码规则来生成标识符。这样可以确保在一定的时间范围内生成的标识符是唯一的。 总之,identifiergenerator是一个用于生成唯一标识符的工具,可以通过使用不同的算法或规则来满足不同应用对唯一标识符的需求。 ### 回答3: identifiergenerator是一个用于生成唯一标识符的工具。在计算机编程和数据库管理,往往需要使用唯一的标识符来代表不同的实体或数据项。这些标识符可以是数字、字符串或其他形式的编码,用于在系统唯一地标识某个对象。 identifiergenerator的作用是生成这些唯一标识符。它可以基于一定的规则和算法,根据特定的输入生成一个唯一的标识符。这样就能确保每个对象都有一个独一无二的标识符,方便在系统进行查询和操作。 identifiergenerator可以根据不同的需求生成不同类型的标识符。例如,在数据库,可以使用自增长的整数作为标识符,每次新增数据时自动递增生成新的标识符。在分布式系统,可以使用全局唯一标识符(GUID)来确保在不同节点上生成的标识符都是唯一的。 除了生成唯一标识符,identifiergenerator还可以提供其他功能。例如,可以生成带有前缀、后缀或特定格式的标识符,以满足特定的需求。还可以提供标识符的验证功能,用于判断一个标识符是否合法或已经被使用。 总之,identifiergenerator是一个用于生成唯一标识符的工具,它能够根据一定的规则和算法,生成不同类型的标识符。通过使用identifiergenerator,我们可以方便地管理和操作系统的不同实体和数据项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值