Hibernate的Generator属性有7种class,本文简略描述了这7种class的意义和用法。
1、identity:用于MySql数据库。特点:递增
- < id name="id" column="id">
-
< generator class="identity"/>
-
< /id>
注:对于MySql数据库使用递增序列时需要在建表时对主键指定为auto_increment属性。
2、sequence:用于Oracle数据库
-
< id name="id" column="id">
-
< generator class="sequence">
-
< param name="sequence">序列名< /param>
-
< /generator>
-
< /id>
3、native:跨数据库时使用,由底层方言产生。
Default.sequence为hibernate_sequence
-
< id name="id" column="id">
-
< generator class="native"/>
-
< /id>
注:使用native时Hibernate默认会去查找Oracle中的hibernate_sequence序列。
如果Oracle中没有该序列,连Oracle数据库时会报错。
4、hilo:通过高低位合成id,先建表hi_value,再建列next_value。必须要有初始值。
-
< id name="id" column="id">
-
< generator class="hilo">
-
< param name="table">high_val< /param>
-
< param name="column">nextval< /param>
-
< param name="max_lo">5< /param>
-
< /generator>
-
< /id>
5、sequencehilo:同过高低位合成id,建一个sequence序列,不用建表。
-
< id name="id" column="id">
-
< generator class="hilo">
-
< param name="sequence">high_val_seq< /param>
-
< param name="max_lo">5< /param>
-
< /generator>
-
< /id>
6、assigned:用户自定义id;
-
< id name="id" column="id">
-
< generator class="assigned"/>
-
< /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子元素的用法:
-
< class name="onlyfun.caterpillar.User" table="USER">
-
< id name="id" type="string" unsaved-value="null">
-
< column name="USER_ID"/>
-
< generator class="uuid.hex"/>
-
< /id>
分享到:
相关推荐
在 Hibernate 中,`generator` 属性是用于指定如何生成实体类的唯一标识(通常为主键)的一种机制。这个属性可以配置在 `hibernate.hbm.xml` 文件中的 `<id>` 标签内,它允许你选择不同的策略来生成 ID。 1. **...
《使用Hibernate Code Generator提高开发效率》 在Java J2EE开发中,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,手动编写与数据库表对应的Java实体类、Hibernate的.hbm映射...
Hibernate的Generator属性用于指定主键的生成策略,常见的有`Identity`(自增)、`native`(数据库特定的机制)、`assigned`(手动分配)和`uuid`(UUID生成)。 #### SessionFactory方法比较 `SessionFactory`是...
在Hibernate中,`Generator`是负责生成主键值的策略,通常在`<id>`元素中通过`class`属性指定。不同的数据库和不同的应用场景可能需要不同的生成策略。接下来,我们将逐一介绍各种常见的生成策略及其适用场景。 ###...
Hibernate属性级别注解是Hibernate ORM框架中用于在Java对象(实体类)的属性上定义数据库映射的关键元素。这些注解使得开发人员能够无需XML配置文件就能声明对象与数据库之间的映射关系,从而简化了开发过程。以下...
1. `default-access`:这个参数定义了Hibernate如何访问对象的属性。默认值是`property`,意味着Hibernate将使用getter和setter方法来读写属性。如果自定义了访问策略,可以通过实现`PropertyAccessor`接口来指定。 ...
`hibernate-configuration-3.0.dtd`是Hibernate 3.0版本的配置文件格式的规范,它规定了`hibernate.cfg.xml`文件中元素和属性的语法。例如,`<session-factory>`是配置文件中的核心元素,它可以包含如`<property>`...
例如,`<hibernate-mapping>`元素的`package`属性指明了配置文件所在的包,`<class>`元素的`name`属性用于关联Java类(如`User`类),并可以指定对应的数据库表(如果未明确指定,系统会默认使用类名作为表名)。...
- **4.3.3.1 Hibernate配置属性**: 如show_sql用于控制是否显示执行的SQL语句。 - **4.3.3.2 Hibernate JDBC和连接(connection)属性**: 包括连接池大小等。 - **4.3.3.3 Hibernate缓存属性**: 控制缓存行为。 - ...
4. `<id>` 元素定义主键,`generator` 属性指定生成策略,`identity` 表示由数据库自动生成 ID。 5. `<property>` 元素表示实体类的属性,`name` 是 Java 中的字段名,`column` 是对应数据库表中的列名。 `...
006---Hibernate基本映射标签和属性介绍 - <hibernate-mapping>:定义映射文档的根元素。 - <class>:定义一个Java类到数据库表的映射。 - <id>:标识一个实体的唯一标识,对应数据库表的主键。 - <property>:映射...
<generator class="native" /> <!-- 一对多关联关系 --> <one-to-many class="com.Hibernate.City" /> </hibernate-mapping> ``` 在该文件中,我们可以看到有多个关键的配置项: * `class`:定义...
- `<generator>`:配置主键生成策略,如 native 表示由数据库负责自增。 - `<property>`:用于定义实体类普通属性与数据库表中列的映射。 - `name` 属性:指定实体类属性名。 - `column` 属性:指定数据库表中的...
<generator class="native"/> </hibernate-mapping> ``` 七、表与表的关系 Hibernate 支持多种数据库表之间的关系映射,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多...
在该配置文件中添加Hibernate属性,其中`show_sql`属性在开发测试阶段设置为true,以便输出SQL语句跟踪Hibernate运行状态;在应用发布后设置为false,以提高运行性能。 ##### 第三步:添加Hibernate映射文件 创建...
2. **Increment方式**:`<generator class="increment"/>` 这种方式由Hibernate自己管理主键的递增,而不是依赖数据库。它维护一个全局计数器,每次保存新实体时,计数器加一并作为主键值。但是,这种方式在多线程或...
在Hibernate中,`hibernate.hbm2ddl.auto`属性控制着Hibernate是否自动执行DDL操作。当设置为`create`时,Hibernate会在启动时删除现有表并重新创建新表。这通常用于开发环境中快速迭代的需求。在生产环境中,为了...
<generator>元素(主键生成策略) 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快速入门教程】 在Java开发中,Hibernate是一个非常重要的框架,它实现了对象关系映射(ORM)技术,使得开发者可以使用面向对象的方式来操作数据库,极大地简化了数据访问层的编程工作。本教程针对初学...
实体类`Student`代表数据库中的一个表,其属性映射到表的字段。映射文件`Student.hbm.xml`用于定义实体类与数据库表之间的映射关系。 示例: **Student.java** ```java public class Student { private int id; ...