`

Hibernate的Generator属性

阅读更多

 

 

Hibernate的Generator属性有7种class,本文简略描述了这7种class的意义和用法。

1、identity:用于MySql数据库。特点:递增

  1. < id name="id" column="id">
  2.     < generator class="identity"/>
  3. < /id>

注:对于MySql数据库使用递增序列时需要在建表时对主键指定为auto_increment属性。

 

2、sequence:用于Oracle数据库

  1. < id name="id" column="id">
  2.    < generator class="sequence">
  3.      < param name="sequence">序列名< /param>
  4.    < /generator>
  5. < /id>

3、native:跨数据库时使用,由底层方言产生。
Default.sequence为hibernate_sequence

  1. < id name="id" column="id">
  2.    < generator class="native"/>
  3. < /id>

注:使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。
如果Oracle中没有该序列,连Oracle数据库时会报错。

4、hilo:通过高低位合成id,先建表hi_value,再建列next_value。必须要有初始值。

  1. < id name="id" column="id">
  2.     < generator class="hilo">
  3.       < param name="table">high_val< /param>
  4.        < param name="column">nextval< /param>
  5.       < param name="max_lo">5< /param>
  6.     < /generator>
  7. < /id>  

5、sequencehilo:同过高低位合成id,建一个sequence序列,不用建表。

  1. < id name="id" column="id">
  2. < generator class="hilo">
  3. < param name="sequence">high_val_seq< /param>
  4. < param name="max_lo">5< /param>
  5. < /generator>
  6. < /id>

6、assigned:用户自定义id;

  1. < id name="id" column="id">
  2. < generator class="assigned"/>
  3. < /id>

7、foreign:用于一对一关系共享主健时,两id值一样。

本文讲解Hibernate中hbm的generator子元素的一些内置生成器的快捷名字。Generator子元素是一个非常简单的接口;某些应用程序可以选择提供他们自己特定的实现。

在*.hbm.xml必须声明的< generator>子元素是一个Java类的名字,用来为该持久化类的实例生成唯一的标识。

< generator class="sequence"/>

这是一个非常简单的接口;某些应用程序可以选择提供他们自己特定的实现。当然,Hibernate提供了很多内置的实现。下面是Generator子元素的一些内置生成器的快捷名字:

increment(递增)

用于为long, short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。

identity

对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。返回的标识符是long, short 或者int类型的。

sequence (序列)

在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。

hilo (高低位)

使用一个高/低位算法来高效的生成long, short或者 int类型的标识符。给定一个表和字段(默认分别是是hibernate_unique_key 和next_hi)作为高位值得来源。高/低位算法生成的标识符只在一个特定的数据库中是唯一的。在使用JTA获得的连接或者用户自行提供的连接中,不要使用这种生成器。

seqhilo(使用序列的高低位)

使用一个高/低位算法来高效的生成long, short或者 int类型的标识符,给定一个数据库序列(sequence)的名字。

uuid.hex

用一个128-bit的UUID算法生成字符串类型的标识符。在一个网络中唯一(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。

uuid.string

使用同样的UUID算法。UUID被编码为一个16个字符长的任意ASCII字符组成的字符串。不能使用在PostgreSQL数据库中

native(本地)

根据底层数据库的能力选择identity, sequence 或者hilo中的一个。

assigned(程序设置)

让应用程序在save()之前为对象分配一个标示符。

foreign(外部引用)

使用另外一个相关联的对象的标识符。和< one-to-one>联合一起使用。

Generator子元素的用法:

  1. <  class name="onlyfun.caterpillar.User" table="USER">
  2.            <  id name="id" type="string" unsaved-value="null">
  3.                <  column name="USER_ID"/>
  4.                <  generator class="uuid.hex"/>
  5.            <   /id>  
分享到:
评论

相关推荐

    Hibernate的generator属性

    在 Hibernate 中,`generator` 属性是用于指定如何生成实体类的唯一标识(通常为主键)的一种机制。这个属性可以配置在 `hibernate.hbm.xml` 文件中的 `&lt;id&gt;` 标签内,它允许你选择不同的策略来生成 ID。 1. **...

    hibernate_code_generator.rar

    《使用Hibernate Code Generator提高开发效率》 在Java J2EE开发中,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,手动编写与数据库表对应的Java实体类、Hibernate的.hbm映射...

    SSH面试题

    Hibernate的Generator属性用于指定主键的生成策略,常见的有`Identity`(自增)、`native`(数据库特定的机制)、`assigned`(手动分配)和`uuid`(UUID生成)。 #### SessionFactory方法比较 `SessionFactory`是...

    hibernate中的generator的生成方式hibernate中的generator的生成方式

    在Hibernate中,`Generator`是负责生成主键值的策略,通常在`&lt;id&gt;`元素中通过`class`属性指定。不同的数据库和不同的应用场景可能需要不同的生成策略。接下来,我们将逐一介绍各种常见的生成策略及其适用场景。 ###...

    hibernate属性级别注解实例代码

    Hibernate属性级别注解是Hibernate ORM框架中用于在Java对象(实体类)的属性上定义数据库映射的关键元素。这些注解使得开发人员能够无需XML配置文件就能声明对象与数据库之间的映射关系,从而简化了开发过程。以下...

    hibernate-mapping参数详解

    1. `default-access`:这个参数定义了Hibernate如何访问对象的属性。默认值是`property`,意味着Hibernate将使用getter和setter方法来读写属性。如果自定义了访问策略,可以通过实现`PropertyAccessor`接口来指定。 ...

    hibernate的dtd 包含hibernate.properties

    `hibernate-configuration-3.0.dtd`是Hibernate 3.0版本的配置文件格式的规范,它规定了`hibernate.cfg.xml`文件中元素和属性的语法。例如,`&lt;session-factory&gt;`是配置文件中的核心元素,它可以包含如`&lt;property&gt;`...

    hibernate教程

    例如,`&lt;hibernate-mapping&gt;`元素的`package`属性指明了配置文件所在的包,`&lt;class&gt;`元素的`name`属性用于关联Java类(如`User`类),并可以指定对应的数据库表(如果未明确指定,系统会默认使用类名作为表名)。...

    Hibernate学习.pdf

    - **4.3.3.1 Hibernate配置属性**: 如show_sql用于控制是否显示执行的SQL语句。 - **4.3.3.2 Hibernate JDBC和连接(connection)属性**: 包括连接池大小等。 - **4.3.3.3 Hibernate缓存属性**: 控制缓存行为。 - ...

    Hibernate较完整资料

    4. `&lt;id&gt;` 元素定义主键,`generator` 属性指定生成策略,`identity` 表示由数据库自动生成 ID。 5. `&lt;property&gt;` 元素表示实体类的属性,`name` 是 Java 中的字段名,`column` 是对应数据库表中的列名。 `...

    Hibernate学习笔记特别详细

    006---Hibernate基本映射标签和属性介绍 - &lt;hibernate-mapping&gt;:定义映射文档的根元素。 - &lt;class&gt;:定义一个Java类到数据库表的映射。 - &lt;id&gt;:标识一个实体的唯一标识,对应数据库表的主键。 - &lt;property&gt;:映射...

    hibernate配置文件详解

    &lt;generator class="native" /&gt; &lt;!-- 一对多关联关系 --&gt; &lt;one-to-many class="com.Hibernate.City" /&gt; &lt;/hibernate-mapping&gt; ``` 在该文件中,我们可以看到有多个关键的配置项: * `class`:定义...

    hibernate学习笔记文档

    - `&lt;generator&gt;`:配置主键生成策略,如 native 表示由数据库负责自增。 - `&lt;property&gt;`:用于定义实体类普通属性与数据库表中列的映射。 - `name` 属性:指定实体类属性名。 - `column` 属性:指定数据库表中的...

    hibernate 重点知识原创

    &lt;generator class="native"/&gt; &lt;/hibernate-mapping&gt; ``` 七、表与表的关系 Hibernate 支持多种数据库表之间的关系映射,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多...

    Hibernate+struts实例学习

    在该配置文件中添加Hibernate属性,其中`show_sql`属性在开发测试阶段设置为true,以便输出SQL语句跟踪Hibernate运行状态;在应用发布后设置为false,以提高运行性能。 ##### 第三步:添加Hibernate映射文件 创建...

    Hibernate主键生成方式

    2. **Increment方式**:`&lt;generator class="increment"/&gt;` 这种方式由Hibernate自己管理主键的递增,而不是依赖数据库。它维护一个全局计数器,每次保存新实体时,计数器加一并作为主键值。但是,这种方式在多线程或...

    hibernate映射主键生成策略native

    在Hibernate中,`hibernate.hbm2ddl.auto`属性控制着Hibernate是否自动执行DDL操作。当设置为`create`时,Hibernate会在启动时删除现有表并重新创建新表。这通常用于开发环境中快速迭代的需求。在生产环境中,为了...

    Hibernate笔记 马士兵

    &lt;generator&gt;元素(主键生成策略) 20 二、 annotateon方式 21 1、AUTO默认 21 2、IDENTITY 22 3、SEQUENCE 22 4、为Oracle指定定义的Sequence 22 5、TABLE - 使用表保存id值 23 三、 联合主键 24 1、xml方式 24 2、...

    Hibernate快速入门教程

    【Hibernate快速入门教程】 在Java开发中,Hibernate是一个非常重要的框架,它实现了对象关系映射(ORM)技术,使得开发者可以使用面向对象的方式来操作数据库,极大地简化了数据访问层的编程工作。本教程针对初学...

    Hibernate+IDEA 2018 一个hibernate程序

    实体类`Student`代表数据库中的一个表,其属性映射到表的字段。映射文件`Student.hbm.xml`用于定义实体类与数据库表之间的映射关系。 示例: **Student.java** ```java public class Student { private int id; ...

Global site tag (gtag.js) - Google Analytics