Home > Database > Mysql Tutorial > Hibernate主键生成方式及配置

Hibernate主键生成方式及配置

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-07 17:14:00
Original
1007 people have browsed it

Key Generator主键产生器 lt;generatorgt;元素用来设定标识生成器。Hibernate提供了标识符生成器接口: org.hibernate.id.Ident

Key Generator主键产生器

元素用来设定标识生成器。Hibernate提供了标识符生成器接口: org.hibernate.id.IdentifierGenerator接口;并且提供了多种内置的实现。例如: org.hibernate.id.IdentityGenerator; org.hibernate.id.IncrementGenerator;它们的缩写名分别为:identity和increment。在设置子元素的class属性时,既可以提供完整的标识符生成器的类名,也可以给定缩写名

标识符生成器

        

increment  

identity 

)

sequence

hilo 

native

uuid.hex

assigned

 

 


  主键由外部程序负责生成,无需Hibernate参与。

 

算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。

 

类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle


作为主键。这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。

 

SQL ServerMySQL中的主键生成机制。

 

机制生成主键。如Oralce 中的Sequence

 

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


 


8)

 

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

 

类似,,只是生成的主键未进行编码(长度16)。在某些数据库中可能出现问题(如PostgreSQL)。

 

方式生成主键将提供最好的性能和数据库平台适应性。
  另外由于常用的数据库,如OracleDB2SQLServerMySql 等,都提供了易用的主键生成机制(Auto-Increase 字段或者Sequence)。我们可以在数据库提供的主键生成机制上,采用generator-class=native的主键生成方式。

 

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

 

increment:生成long, short或者int类型的主键,不能在cluster环境下使用。适用于所有数据库
  identity:生成long, short或者int类型的主键。适用于DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL
  sequence :生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase.
  hilo:生成long, short或者int类型的主键。需要提供一个数据库的表来存放生成的主键信息。当采用应用服务器的JTA提供的数据库连接或者用户自定义的数据库连接的时候,不要使用这种主键生成方式。适用于所有数据库
  seqhilo:采用给定的数据库的sequence来生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase.
  uuid.hex:采用128位的算法来生成一个32位字符串。最通用的一种方式。适用于所有数据库
  uuid.string:同样采用128位的UUID算法。将生成的字符编码位16位。适用于除PostgreSQL.以外的数据库
  native:根据具体连接的数据库从identity, sequence或者hilo选择一种来生成主键。适用的数据库根据选择的生成方式确定。
  assigned: 交给应用自己给主键赋值。要注意的是赋值必须在调用save()方法之前完成。适用的数据库根据选择的生成方式确定。

linux

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template