`
wangyanlong0107
  • 浏览: 501848 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

【转】Hibernate中id标签

 
阅读更多

核心提示:Hibernate中,id标签下的可选generator子元素是一个Java类的名字,用来为该持久化类的实例生成惟一标示,所有的生成器都实现net.sf.hibernate.id.IdentifierGenerator接口这是一个非常简单的接口,某些应用程序可以选择提供它们自己的特定实现当然,Hibernate

 

 

Hibernate中,<id>标签下的可选<generator>子元素是一个Java类的名字,用来为该持久化类的实例生成惟一标示,所有的生成器都实现net.sf.hibernate.id.IdentifierGenerator接口这是一个非常简单的接口,某些应用程序可以选择提供它们自己的特定实现当然,Hibernate提供了很多内置的实现下面是一些内置主键生成器(Key Generator)的意义                

1)    assigned
主键由外部程序负责生成,无需Hibernate参与。   让应用程序在save()之前为对象分配一个标示符。这是 <generator>元素没有指定时的默认生成策略。

2)      hilo
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。        使用一个高/低位算法高效的生成long, short 或者 int类型的标识符。给定一个表和字段(默认分别是是 hibernate_unique_key 和next_hi)作为高位值的来源。 高/低位算法生成的标识符只在一个特定的数据库中是唯一的。

3) seqhilo
与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。        使用一个高/低位算法来高效的生成long, short 或者 int类型的标识符,给定一个数据库序列(sequence)的名字。

 4) increment
主键按数值顺序递增此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常因此,如果同一数据库有多个实例访问,此方式必须避免使用。
用于为long, short或者int类型生成 唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。

 5) identity
采用数据库提供的主键生成机制如DB2 SQL Server MySQL中的主键生成机制。          对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。 返回的标识符是long, short 或者int类型的。              

6) sequence
采用数据库提供的sequence 机制生成主键如Oralce 中的Sequence。在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。

7) native
由Hibernate根据底层数据库自行判断采用identity hilo sequence其中一种作为主键生成方式

8) uuid.hex
用一个128-bit的UUID算法生成字符串类型的标识符,这在一个网络中是唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。         由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键例如:5abefd3890cat33llsica3ee43bk222

9) uuid.string
与uuid.hex 类似,只是生成的主键未进行编码(长度16)在某些数据库中可能出现问题(如PostgreSQL)

10)guid 
在MS SQL Server 和 MySQL 中使用数据库生成的GUID字符串。

11)select 
通过数据库触发器选择一些唯一主键的行并返回主键值来分配一个主键。

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

 
一般而言,利用uuid.hex方式生成主键将提供最好的性能和数据库平台适应性另外由于常用的数据库,如 OracleDB2SQLServerMySql 等,都提供了易用的主键生成机制(Auto-Increase 字段或者Sequence)我们可以在数据库提供的主键生成机制上,采用generator-class=native的主键生成方式不过值得注意的是,一些数据库提供的主键生成机制在效率上未必最佳,大量并发insert数据时可能会引起表之间的互锁数据库提供的主键生成机制,往往是通过在一个内部表中保存当前主键状态(如对于自增型主键而言,此内部表中就维护着当前的最大值和递增量),之后每次插入数据会读取这个最大值,然后加上递增量作为新记录的主键,之后再把这个新的最大值更新回内部表中,这样,一次Insert操作可能导致数据库内部多次表读写操作,同时伴随的还有数据的加锁解锁操作,这对性能产生了较大影响因此,对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成机制。

分享到:
评论

相关推荐

    Hibernate标签

    在Hibernate中,标签(Annotations)是用于定义对象与数据库表之间的映射关系的一种方式,它们直接在类或属性上进行注解,使得代码更简洁、易读。本文将详细介绍Hibernate中的主要标签及其用法。 1. **@Entity** ...

    Hibernate中文API大全

    使用&lt;composite-id&gt; 标签(并且内嵌元素)代替通常的&lt;id&gt;标签。比如,OrderLine类具有一个主键,这个主键依赖于Order的(联合)主键。 &lt;composite-id name="id" class="OrderLineId"&gt; &lt;/composite-id&gt; ...

    Hibernate中List信息的配置

    在Hibernate的XML映射文件中,`&lt;map&gt;`标签用于定义`phones`属性与数据库表`PHONES`的映射关系,`&lt;key&gt;`标签指定`Person`的`id`作为外键,`&lt;index&gt;`标签用于映射电话名称,而`&lt;element&gt;`标签则映射电话号码。...

    使用hibernate封装方法

    在Java Web开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。Struts是MVC(模型-视图-控制器)框架,用于处理HTTP请求,而JSP(JavaServer Pages)则用于创建动态网页。...

    hibernate教程

    `&lt;id&gt;`标签定义主键,`&lt;property&gt;`标签则对应于类中的普通属性。 - `&lt;id&gt;`标签下的`&lt;generator&gt;`子标签定义了主键的生成策略,`class="native"`表示使用数据库默认的主键生成策略。 - `&lt;property&gt;`标签的`name`...

    Hibernate框架jia包

    Hibernate通过`&lt;class&gt;`标签(XML映射)或@Entity注解(注解映射)定义实体类,`&lt;id&gt;`表示主键,`&lt;property&gt;`或@Basic对应字段,`&lt;many-to-one&gt;`或@ManyToOne处理一对多关系,`&lt;one-to-many&gt;`或@OneToMany处理多对...

    hibernate关系映射网址

    在Hibernate中,可以通过`&lt;many-to-one&gt;`标签来实现。 ```xml &lt;id name="id" column="articleid"&gt; &lt;/id&gt; &lt;id name="id" column="authorid"&gt; &lt;/id&gt; ``` ##### 3.3 多对多关系映射 多对多关系是...

    Hibernate学习笔记特别详细

    以上便是对Hibernate基础的概览,实际开发中,还需要深入了解实体关系映射、集合映射、级联操作、缓存机制、事务管理、性能优化等方面的知识,才能更好地利用Hibernate提升开发效率并保证应用程序的稳定运行。...

    Hibernate的generator属性

    这个属性可以配置在 `hibernate.hbm.xml` 文件中的 `&lt;id&gt;` 标签内,它允许你选择不同的策略来生成 ID。 1. **identity**:这个生成器适用于像 MySQL 这样的数据库,它依赖于数据库自身的自动递增功能。例如,在 ...

    hibernate中文官方文档3.6

    - **自然ID(Natural-ID)**:自然ID的概念及其在Hibernate中的应用。 - **Any**:特殊映射类型,用于处理非标准数据类型。 - **属性(Properties)**:实体类中属性的具体映射规则。 以上内容覆盖了Hibernate中文...

    Hibernate快速入门教程

    `&lt;id&gt;`标签定义了主键,`&lt;property&gt;`标签则对应类中的其他属性。`&lt;generator class="native"&gt;`表示主键生成策略,这里的`native`策略会根据数据库的特性自动选择合适的主键生成方式。 了解了这些基础概念后,开发者...

    精通hibernate

    例如,`&lt;id&gt;`标签表示主键,`&lt;property&gt;`标签映射一般字段,如名称、电子邮件等。 二、Hibernate API与数据库交互 1. Session接口:是与数据库交互的主要接口,提供了保存、更新、删除对象以及执行查询等方法。 2...

    Hibernate更新某些字段

    ### 方法一:在 XML 中设置 property 标签 update = "false" 在 Hibernate 的 XML 配置文件中,我们可以设置某些属性的 update 属性为 false,这样 Hibernate 就不会更新这些属性。例如,我们可以设置 age 属性的 ...

    hibernate项目源代码

    【标签】"hibernate"强调了这个项目的核心内容,即围绕Hibernate框架展开。在Hibernate项目中,通常会涉及以下几个核心知识点: 1. **配置文件**:`hibernate.cfg.xml`是Hibernate的主配置文件,其中包含了数据库...

    在Netbeans中使用Struts2.0+Spring2.5+Hibernate框架

    ### 在Netbeans中使用Struts2.0+Spring2.5+Hibernate框架 #### 一、概述 在当今的企业级应用程序开发中,采用MVC(Model-View-Controller)架构模式的框架组合变得越来越普遍。其中,Struts2、Spring与Hibernate...

    hibernate的lazy策略forClass

    至于“工具”标签,这可能指的是使用特定的工具或插件来辅助理解和调试Hibernate的懒加载行为,比如日志工具(如Log4j)可以跟踪SQL语句,帮助开发者查看是否成功实现了懒加载。另外,IDE如IntelliJ IDEA或Eclipse的...

    Hibernate入门 - 基础配置

    在这个例子中,`&lt;id&gt;`标签定义了主键,`&lt;generator&gt;`指定自动增长的策略。`&lt;property&gt;`定义了对象属性。`&lt;loader&gt;`标签用于定义命名查询,这在获取或加载Person对象时会被调用。最后,`&lt;sql-insert&gt;`, `&lt;sql-update&gt;...

    hibernate中的集合映射范例程序

    在Hibernate中,我们可以使用`&lt;list&gt;`标签来映射,通过`index column`定义索引列,`inverse`属性控制关联的维护权。例如,一个学生可以有多个课程,那么课程可以被映射为List。 2. **Set映射**:Set不允许元素重复...

Global site tag (gtag.js) - Google Analytics