`
diaolanshan
  • 浏览: 175173 次
  • 性别: 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学习资料

    #### Hibernate内置标识符生成器 标识符生成器负责生成实体对象的主键值。Hibernate提供了多种内置的标识符生成策略,例如`increment`(递增)、`identity`(数据库自增)和`sequence`(序列)等。 #### ...

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

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

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

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

    Hibernate Tutorial 03 (Object Identifier).pdf

    Hibernate提供了一系列内置的标识符生成策略,其中有些只适用于特定类型的数据库。最常见的标识符生成方式是使用自动递增序列号。对于某些类型的数据库(如HSQLDB),可以使用序列/生成器来生成这个序列号。这种策略...

    精通 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 映射自然主键  ...

    J2EE Hibernate-2.ppt

    Hibernate支持多种内置的标识符生成器,如`increment`、`native`、`sequence`等,可以根据数据库系统选择合适的生成策略。`type`属性的值可以是Hibernate预定义的类型,如`string`、`int`,它们对应Java的String和...

    hibernate说明文档

    #### Hibernate标识符生成器 Hibernate提供了多种内置的标识符生成策略,用于处理主键的生成: - **increment**: 自动递增策略,适用于代理主键,每次增加1,仅限于`long`, `int`, `short`类型。 - **identity**: ...

    hibernate教程

    Hibernate验证器是用于校验实体对象的有效性的一种机制,它可以通过注解的方式来定义实体上的约束条件。 - **约束**: - 内置约束:如`@NotNull`、`@Size`等。 - 自定义约束:可以通过实现`ConstraintValidator`...

    hibernate annotation 中文文档

    - **4.1.2 内建约束**:Hibernate 验证器内置了一些常见的约束注解,如 `@NotNull`、`@Size` 等。 - **4.1.3 错误信息**:可以通过 `@Constraint` 注解的 `message` 属性来定义约束违反时的错误消息。 - **4.1.4 ...

    hibernate的映射文件配置

    除了内置的主键生成策略,开发者还可以通过扩展Hibernate的类来自定义主键生成器。这允许更灵活地控制主键的生成逻辑,满足特定业务场景的需求。具体实现细节可参考相关文档或社区资源。 总之,Hibernate映射文件的...

    达内HIBERNATE学习笔记

    - 掌握id的内置生成器。 #### 2.2 映射元素 - **映射文件组成**:包括类映射、属性映射等。 - **常用元素**: - `<class>`:表示映射到数据库表的Java类。 - `<id>`:表示主键字段的映射。 - `<property>`:表示...

    Hibernate映射文件id的generator配置方法

    如果这个生成器实例需要某些配置值或者初始化参数,可以使用 `<param>` 元素来传递这些参数。 Hibernate 提供了多种内置的 generator 实现,每种实现都有其特点和用途。下面是一些内置 generator 的快捷名字: * ...

    Hibernate Reference Documentation

    - **生成器**:配置主键的生成策略。 - **Hi/Lo 算法**:一种简单高效的主键生成算法。 - **UUID 算法**:使用通用唯一标识符作为主键。 - **自动增长列和序列**:利用数据库本身的特性生成主键值。 - **分配...

    hibernate annotation帮助文档

    **:Hibernate Validator 提供了一套内置的约束注解,用于验证实体对象的状态。 - **内建约束**:如 `@NotNull`, `@Size`, `@Pattern` 等。 - **错误信息**:可以通过 `message` 属性来自定义验证失败时显示的消息...

Global site tag (gtag.js) - Google Analytics