`
追梦java
  • 浏览: 36929 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

hibernate id 生成策略

 
阅读更多

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

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

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

2、sequence:用于Oracle数据库

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

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

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

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子元素是一个非常简单的接口;某些应用程序可以选择提供他们自己特定的实现。IDCard与Student形成一对一关联,IDCard端的设置映射配置如下:

<class name="IDCard">

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;id name="id" column="Card_id"&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;generator class="foreign"&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;param name="property"&gt;student&lt;/param&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;/generator&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr> &lt;/id&gt;<wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;property name="IDNo" unique="true"/&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;property name="nationality"/&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;property name="address"/&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> &lt;one-to-one name="student"<wbr> class="Student" constrained="true"/&gt;<wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

</class>

解释:

(1)<generator class="foreign">

<wbr><wbr><wbr><wbr> 指定id生成方式, (之前我们用的id生成方式是native,是让底层数据库自动生成id,目前我的应征环境下,native从1开始,递增生成id)。在这里,我们要用外键来生成主键,所以指定为foreign,也就是去共享关联对象的主键。</wbr></wbr></wbr></wbr>

(2)<param name="property">student</param>

<wbr><wbr><wbr> 指定主键来源,这里的student是关联名称。</wbr></wbr></wbr>

(3)<one-to-one name="student"<wbr> class="Student" constrained="true"/&gt;<wbr><wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> 指定与Student形成一对一关联,</wbr></wbr></wbr></wbr>

(4)constrained=”true”

该选项最关键的是影响save和delete的先后顺序

没有设定时:总是先操作关联表,后操作本表;

设定以后:添加时先关联表,后本表;删除时先本表,再操作关联表。

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

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

< generator class="sequence"/>

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

<wbr></wbr>

<wbr></wbr>

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

相关推荐

    Hibernate教程02_ID生成策略

    http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码

    JAVA 的ID生成策略

    主要描述hibernate在Annotation情况下的主键生成策略

    Hibernate的主键生成策略

    Hibernate的所有自带的主键生成策略以及XML配置文件的用法

    JPA学习笔记-EJB-03JPA主键生成策略总结

    第一种单字段主键类型,看上去简单,无非就是一个id字段呗,实际上这个主键字段在JPA,还有任何的ORM框架中都是有很多种生成策略的。 一般是如下4种: 1. AUTO:自动自增生成 2. TABLE:自定义表生成器 3. Identity...

    auto-factory-0.1-beta1.zip

    postgres-hibernate-mapper.zip,Postgre Hibernate Mapper是处理默认Hibernate ID生成策略的小项目。Postgre-Hibernate-Mapper是解决此问题的小项目...

    Hibernate笔记 马士兵

    第13课 ID主键生成策略 20 一、 Xml方式 20 元素(主键生成策略) 20 二、 annotateon方式 21 1、AUTO默认 21 2、IDENTITY 22 3、SEQUENCE 22 4、为Oracle指定定义的Sequence 22 5、TABLE - 使用表保存id值 23 三、 ...

    马士兵hibernate学习笔记(原版)

    5 ID生成策略(重点 AUTO) 6 Hibernate核心开发接口介绍(重点) ... 风格 1 先脉络,后细节 2 先操作,后原理 3 重Annotation,轻xml配置文件 ... 性能优化 1 注意session.clear()的运用,尤其在不断...

    Hibernate注解

    * @GenericGenerator —— 注解声明了一个hibernate的主键生成策略。支持十三种策略。该注解有如下属性 * name 指定生成器名称 * strategy 指定具体生成器的类名(指定生成策略)。 * parameters 得到strategy指定的...

    Hibernate+中文文档

    3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. 别名注射(alias injection names) 19.1. ...

    hibernate配置

    hibernate是一个封装在SQL和JDBC之上的企业级应用框架 配置文件的基本结构如下: &lt;?xml version="1.0" encoding='UTF-8'?&gt;... 主键生成策略"/&gt; &lt;/id&gt; …… &lt;/hibernate-mapping&gt;

    Hibernate注释大全收藏

    @Id 注解可将实体Bean中某个属性定义为主键,使用@GenerateValue注解可以定义该标识符的生成策略。 • AUTO - 可以是 identity column, sequence 或者 table 类型,取决于不同底层的数据库 • TABLE - 使用table...

    Hibernate中的merge使用详情解说.docx

    merge的作用是:新new一个对象,如果该对象设置了ID,则这个对象就当作游离态处理: 当ID在数据库中不能找到时,用...用update的话,由于没有ID,所以会报异常,merge此时则会保存数据,根据ID生产策略生成一条数据;

    hibernate3.2中文文档(chm格式)

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    HibernateAPI中文版.chm

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    hibernate 教程

    开始Hibernate之旅 1.2. 第一个可持久化类 1.3. 映射cat 1.4. 与猫同乐 1.5. 结语 2. 体系结构 2.1. 总览 2.2. JMX集成 2.3. JCA支持 3. SessionFactory配置 3.1. 可编程配置方式...

    hibernate课程详解

    hibernate相关知识,包括关系映射、缓存配置、id生成策略等

    hibernate笔记

    5 ID生成策略(重点 AUTO) 5 6 Hibernate核心开发接口介绍(重点) 5 7 对象的三种状态(了解) 5 8 关系映射(重点) 5 9 Hibernate査询(HQL) 5 10 在Struts基础上继续完善BBS200 5 11 性能优化(重点) 5 12 补充...

    hibernate学习笔记

    Hibernate 学习笔记 Hibernate 学习笔记 1 第一个hibernate项目(hibernate_first) 2 测试实体对象的生命周期(hibernate_session) 3 ...hibernate抓取策略 53 Hibernate最佳实践(Best Practices) 55

    演示怎样在Hibernate中使用复合主键

    那么,我们这里的解决方案是使用uuid.hex生成32个字符长度的ITEM_ID订单编号,然后CATEGORY_ITEM表根据这个订单编号来追加业务逻辑数据。 使用方式: 1、下载解压之后,使用MyEclipse导入工程 2、使用查询分析,把...

    HibernateForeignKeyGenerator:演示如何在Hibernate Framework中使用“外国”生成器策略。 以及如何定义一对一关系

    演示如何使用Hibernate生成器“ Foreign”关键策略和一对一映射。 介绍如何使用Hibernate和spring在内存嵌入式db中使用H2。 给您有关创建定制生成器的想法。TechStack。 Spring Core / ORM。 Hibernate框架。 ...

Global site tag (gtag.js) - Google Analytics