`
diaolanshan
  • 浏览: 172719 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Hibernate内置标识符生成器

阅读更多

Hibernate允许把OID定义为short,int,long以及他们的包装类型。

Hibernate的内置标识符有以下几种:

 

increment 适用于逻辑主键.由hibernate自动以递增方式生成.
identity 适用于逻辑主键.由底层数据库生成标识符.
sequence 适用于逻辑主键.hibernate根据底层数据库的序列生成标识符,这要求底层数据库支持序列.
hilo 适用于逻辑主键.hibernate通过high/low算法生成标识符.
seqhilo 适用于逻辑主键.使用一个高低位算法来高效地生成long,short,或者int类型的标识符.
native 适用于逻辑主键.根据底层数据库对自动生成标识符的方式,自动选择identity,sequence,hilo.
uuid.hex 适用于逻辑主键.hibernate采用128位的uuid算法生成标识符
uuid.string 适用于逻辑主键.使用和uuid.hex同样的算法,uuid被编码成一个16字符长的字符串.不能使用在PostreSQL数据库中.
assigned 适用于业务主键.由java应用程序负责生成标识符.
foreign 适用于逻辑主键.使用另外一个相关联的对象的标识符

 

下面详细介绍几种常用的生成器。

1)Increment标识符生成器

   HIbernate会以自增的方式生成标识符,事实上是在hibernate的初始化阶段读取将要操作的表中的最大的ID(select max(ID) from tableName),在向数据库中插入记录时再在此基础上递增。

   这样就会存在并发的问题:如果同时有两个hibernate进程读取了这个最大值(假设为100),在向数据库中插入数据的时候都会想插入ID为101的记录,这样就违反了数据库的约束。这个问题只要是存在两个sessionFacotry就会发生,不能在集群下使用。

   优点:生成标识符的机制不依赖于底层数据库,适用于所有的数据库系统。

2)Identity标识符生成器

    identity标识符生成器由底层数据库来负责生成标识符,它要求底层数据库把主键定义为自动增长字段类型,比如在MySql中应为auto_increment,SQL Server中为identity。

    优缺点:必须依赖于底层数据库。

3)sequence标识符生成器

    sequence标识符生成器利用底层数据库提供的序列来生成标识符(需要在数据库中创建一个序列)。

4)Native标识符生成器

    native标识符生成器依据底层数据库对自动生成标识符的支持能力,来选择适用identity,sequence,hilo标识符生成器。native能自动判读底层数据库提供的生成符机制,如果为MySQL和SQL Server为identity,如果数据库为Oracle则为sequence。

5)assigned标识符生成器

    由程序指定OID。  

分享到:
评论

相关推荐

    精通hibernate:对象持久化技术孙卫琴第二版part2

    本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...

    精通Hibernate:对象持久化技术第二版part3

    本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    6.4 Hibernate的内置标识符生成器的用法  6.4.1 increment标识符生成器  6.4.2 identity标识符生成器  6.4.3 sequence标识符生成器  6.4.4 hilo标识符生成器  6.4.5 native标识符生成器  6.5 映射自然主键  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

    6.4 Hibernate的内置标识符生成器的用法  6.4.1 increment标识符生成器  6.4.2 identity标识符生成器  6.4.3 sequence标识符生成器  6.4.4 hilo标识符生成器  6.4.5 native标识符生成器  6.5 映射自然主键  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

    6.4 Hibernate的内置标识符生成器的用法  6.4.1 increment标识符生成器  6.4.2 identity标识符生成器  6.4.3 sequence标识符生成器  6.4.4 hilo标识符生成器  6.4.5 native标识符生成器  6.5 映射自然主键  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

    6.4 Hibernate的内置标识符生成器的用法  6.4.1 increment标识符生成器  6.4.2 identity标识符生成器  6.4.3 sequence标识符生成器  6.4.4 hilo标识符生成器  6.4.5 native标识符生成器  6.5 映射自然主键  ...

    从J2SE到J2EE知识点介绍

    1.标识符 6 2. 基本数据类型 6 (三).面向对象 6 1.类和对象 6 2.类的声明 7 3.成员变量的声明 8 4成员方法的声明 8 5.创建对象 9 6.对象的使用 9 7.对象的初始化 10 8.类的封装 11 9.实例成员和类成员 13 (四)....

    Grails 中文参考手册

    2.11 生成Grails应用 3. 配置 3.1 基本配置 3.1.1 内置选项 3.1.2 日志 3.2 环境 3.3 数据源 3.3.1 数据源和环境 3.3.2 JNDI数据源 3.3.3 自动数据库移植 3.4 外部配置 3.5 定义版本 4. 命令行 4.1 创建Gant脚本 4.2...

Global site tag (gtag.js) - Google Analytics