Hibernate标识符生成器

转载 2012年03月21日 20:45:09
 
1.assigned标识符生成器
  assigned标识符生成器指定由应用程序生成并维护持久化对象的标识符。在这种情况下,标识符生成器使用应用程序分配给对象的标识符值。一般情况下,assigned生成器使用一个自然键(包含对象的业务属性)做主键。
  assigned标识符生成器使用应用程序生成的标识符属性值,不涉及底层数据库实现细节,适合于各种数据库;持久化类的标识符可以采用任何Java支持的数据类型。但Hibernate不推荐使用assigned标识符生成器。因为assigned标识符生成器使用了包含业务信息的主键,系统扩展性不强。


2.increment标识符生成器
  increment标识符生成器以递增的方式由Hibernate自行生成标识符属性值,增量为1。其中持久化类的标识符可以采用short、int和long数据类型以及它们的包装类。
  increment适用于只有一个线程向数据库插入数据的情况,多个线程使用increment标识符生成器向同一数据库插入数据时,极易产生冲突,最终导致系统崩溃。虽然increment标识符生成器不依赖于数据库底层实现,适合于所有的数据库系统,但是只能局限于单个进程对同一数据库的操作,因而不推荐在生产环境中使用,尤其不推荐在集群中使用。


3.identify标识符生成器
  identify标识符生成器根据数据库底层机制,实现主键地自动增长。主键的增长方式在生成数据库表时进行定义。不同的数据库实现自动增长的方式有所不同,因而主键的定义方式也有所不同。其中持久化类的标识符可以采用short、int和long数据类型以及它们的包装类型。
  使用identify标识符生成器,需要依赖于底层数据库的主键生成机制。只要数据库支持自动增长的主键生成方式,就可以使用identify标识符生成器。Oracle不支持主键自动增长,identify标识符生成器不适合Oracle。


4.sequence标识符生成器
  sequence标识符生成器使用序列获取主键,根据序列值保证主键的唯一性。序列是一个数据库对象,不依赖于特定的表,Hibernate根据底层数据库的序列生成标识符。其中持久化类的标识符可以采用short、int和long数据类型以及它们的包装类型。
  使用sequence标识符生成器时,需要底层数据库具备生成序列的能力。只要数据库支持序列,就可以使用sequence标识符生成器。使用sequence标识符生成器时,需要注意一个问题:每次数据的插入,都会产生两条sql语句,第一条获取序列值,第二条才真正插入数据。MySQL和MS SQL Server不支持序列。


5.hilo标识符生成器
  hilo标识符生成器由Hibernate使用high/low算法来生成标识符,它从数据库的特定表的字段中获取high值。其中持久化类的标识符可以采用short、int和long数据类型以及它们的包装类型。
  由于high/low算法根据数据库的表由Hibernate负责生成主键值,不依赖于特定的数据库,所以hi/lo对象标识符生成器可以适用于所有的数据库。


6.uuid标识符生成器
  uuid标识符生成器使用一个128位的全局唯一标识符(Universally Unique Identifier,UUID)算法生成字符串类型的标识符。UUID包含本机的IP地址、本机JVM的信息,相对于同一时空中的所有机器都是唯一的。uuid标识符生成器由Hibernate维护并生成uuid值,不依赖于底层数据库的实现细节,因而可以适用于所有数据库。
  使用uuid标识符生成器需要注意以下的问题:由于UUID的值是完全随机的,因此在数据库中,不能确定记录的顺序。另外,uuid标识符生成器使用32位16进制字符串,需要占用更多的空间,索引的效率也比较低。


7.guid标识符生成器
  guid包含当前日期、时间、时钟序列和全局唯一的IEEE机器识别号等,在全局是唯一的。
  使用guid标识符生成器保存数据时,标识符生成器从数据库中获取guid作为对象标识符的值和记录的主键。使用guid需要底层数据库的支持。


8.native标识符生成器
  native标识符生成器本身不具备生成主键的能力,是为了扩展hibernate的跨平台支持能力而引入的特性。native标识符生成器根据底层数据库的支持能力自动从identify、sequence和hilo三者之中选择合适的标识符生成器。如果底层数据库支持标识字段的主键,如MySQL数据库,native标识符生成器选择使用identify标识符生成器;如果底层数据库支持序列方式生成主键,如Oracle数据库,native标识符生成器将选择使用sequence标识符生成器。使用时,只需要设置generator元素的class属性为native,就可以使Hibernate具备跨平台的支持能力。
  在支持序列的数据库中使用native标识符生成器时,如果Hibernate配置为启动时自动生成数据库模式,那么应用程序将自动生成序列hibernate_sequence,并在整个Hibernate应用中,共享序列hibernate_sequence。否则,需要手工创建序列,并在映射定义文件中指定序列的名称 。

常用数据库可使用的标识符生成器:
MySQL:identity、increment、hilo、native
MS SQL Server:identity、increment、hilo、native
Oracle:sequence、seqhilo、increment、hilo、native
跨平台开发:native

Hibernate内置对象标识符(OID)生成器

1.increment标识符生成器: private
  • qq_21989939
  • qq_21989939
  • 2015年07月12日 14:12
  • 632

hibernate之标识符生成器用法

hibernate常用主键生成策略说明
  • yhl_jxy
  • yhl_jxy
  • 2016年02月16日 15:08
  • 568

Hibernate提供的内置标识符生成器

Hibernate提供的内置标识符生成器Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键来识别或区分同一个表的不同记录。Hibernate使用OID(对象标识符)来统一两者之间...
  • zerolsy
  • zerolsy
  • 2008年09月10日 14:28
  • 1649

Hibernate内置标识符生成器

Hibernate提供的内置标识符生成器Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键来识别或区分同一个表的不同记录。Hibernate使用OID(对象标识符)来统一两者之间...
  • liuhongtai888
  • liuhongtai888
  • 2008年10月11日 10:12
  • 216

Hibernate中的8种标识符生成器

1.assigned标识符生成器   assigned标识符生成器指定由应用程序生成并维护持久化对象的标识符。在这种情况下,标识符生成器使用应用程序分配给对象的标识符值。一般情况下,assigned...
  • tiercel2008
  • tiercel2008
  • 2012年06月24日 14:20
  • 783

hibernate中的id生成器

1) assigned 主键由外部程序负责生成,无需Hibernate参与。 2) hilo 通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。 3) seqhilo 与...
  • yanlianglu
  • yanlianglu
  • 2015年05月27日 09:45
  • 9320

Hibernate的ID标识符生成器

这次我们一起来看看Hibernate的ID标识符生成器,也就是Hibernate生成OID有哪些策略!先看下表: Hibernate标识生成策略标识符生成器描述increment适用于代理主键。由Hi...
  • lenotang
  • lenotang
  • 2008年07月01日 23:14
  • 2031

Hibernate主键生成器详解

在类的映射文件*.hbm.xml中有下面一段代码主要的有assigned identity increment uuid sequence increment...
  • sinat_21946155
  • sinat_21946155
  • 2015年07月16日 11:23
  • 750

精通Hibernate——Hibernate内置标识符详解

1、increment标识符生成器 由Hibernate以递增的方式为代理主键,例如: ...
  • fuyuwei2015
  • fuyuwei2015
  • 2015年07月27日 22:00
  • 890

hibernate中id生成器详解

1、identity:用于MySql数据库。特点:递增  id name="id" column="id">      generator class="identity"/>  /id...
  • xingfeng0501
  • xingfeng0501
  • 2011年09月18日 17:06
  • 3663
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate标识符生成器
举报原因:
原因补充:

(最多只允许输入30个字)