`
schy_hqh
  • 浏览: 542366 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Hibernate基于配置文件(五)ID生成策略及其对效率的影响

 
阅读更多

实体类的ID生成策略

 



主键选用原则--无意义字段/非业务
主键不能修改
主键是程序实现上利用的,与客户的实际业务无关---逻辑主键,没有业务上的意义
因为主键与业务无关,也就防止了被修改的可能性
id生成策略---解决了id生成的方式--由hibernate来完成,程序员不需要考虑,完全由hibernate进行管理
<id name="id">
            <generator class="native"/>
</id>

在调用save()将对象变为持久化对象的时候,hibernate将利用id生成策略算法来对对象进行id赋值
因为,持久化对象必具有唯一的id标识值

项目中常用的生成策略:


native --依赖于数据库底层,适用范围 short int long---不同表的id都为1开始,由hibernate根据数据库类型自动选择策略,如果是mysql,则identity,如果是oracle,则sequence,否则hilo策略。

             mysql : identity  

             oracle: sequence
             hilo  --依赖于数据库底层,适用范围 short int long ---一个数据库下的id不会重复

uuid  字符串id --不依赖于数据库底层,在内存中生成,整个网络中id标识符唯一

 

foreign  一对一外键关联时,用关联表的id值作为本表的id值

assign 程序员手动给id赋值


save()是否立即发出insert语句,取决于id值的生成是否依赖数据库底层
identity与sequence策略

id从1开始,依次递增,依赖数据库底层来生成id

必须先insert才会有id值,所以在save()被调用时,会立即发出insert语句

因为需要数据库底层来生成id,在生成id之后,hibernate会更新内存中的id值;

hilo与uuid策略

id值不是递增的,不依赖/不完全依赖数据库底层生成id

在save()被调用时,不会立即发出insert语句,等到commit()时才发出insert语句。

(hilo采用高低位算法生成id值,在内存中会生成一个值,再在数据库中生成一个值,这个值基于数据库中的其它表来生成,所以不需要立即插入到表中;uuid在内存中即可生成)

因为id值由hibernate在内存中自动生成,会在commit()被调用后,才会发出insert语句。

 

 

批量插入数据时,如果使用native策略,将非常的低效:

每次save()都必须先发insert语句,无法利用JDBC的批处理功能!

解决方案:

1.使用assign策略,手动指定id(先查询当前表的id值,得出下一个id值,这样就实现id连续了)

2.每次save()调用200次,flush(),批量将这200条插入到数据库中

 

分享到:
评论

相关推荐

    hibernate 配置文件 生成工具

    1.采用freeMarker模板来生成代码,真正实现了自定义代码模板; 2.理论上可以生成任何语言的任何所需要的模板; 3.更改了内部逆向工程的实现方式,提高效率和稳定性;...5.修正了生成文件编码不正确的BUG;

    Hibernate的主键生成策略

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

    hibernate配置

    配置文件的基本结构如下: &lt;?xml version="1.0" encoding='UTF-8'?&gt; &lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" ...

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

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

    代码自动生成工具 javabean hbm 配置文件

    1.终于在这个版本中实现了模板化管理,采用freeMarker模板来生成代码, 真正实现了自定义代码模板; 2.理论上可以生成任何...5.预计下个版本增加从PowserDesigner的 PDM文件,和 CMD文件 直接导入,并生成代码的功能

    hibernate 体系结构与配置 参考文档(html)

    Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5...

    Hibernate+中文文档

    3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化...

    深入浅出Hibernate中文版 part1

    3.2 Hibernate配置 3.3 日志配置 3.4 第一段代码 3.5 代码初解 第4章 Hibernate基础 4.1 Hibernate基础语义 4.2 基础配置 4.3 Hibernate O/R映射 4.4 数据关联 4.5 Hibernate数据检索 4.6 HQL实用技术 ...

    hibernate笔记

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

    HibernateAPI中文版.chm

    3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化...

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

    3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化...

    hibernate 教程

    XML配置文件 4. 持久化类(Persistent Classes) 4.1. POJO简单示例 4.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators) 4.1.2. 实现一个默认的构造方法(constructor) 4.1.3. ...

    Hibernate 中文 html 帮助文档

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    Hibernate注释大全收藏

    这种策略支持双向的一对多关联,但不支持 IDENTIFY 生成器策略,因为ID必须在多个表间共享。一旦使用就不能使用AUTO和IDENTIFY生成器。 每个类层次结构一张表 @Entity @Inheritance(strategy=InheritanceType....

    Hibernate中文详细学习文档

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    最全Hibernate 参考文档

    3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. JTA和Session的自动绑定 3.8.4. JMX部署 4. 持久化类(Persistent Classes) 4.1. 一个简单的...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4. JMX部署 4. 持久化...

    Hibernate教程

    2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. 第二部分 - 关联映射 2.3.1. 映射Person类 2.3.2. 一个单向的Set-based关联 2.3.3. 使关联工作 2.3.4. 值类型的集合...

    深入浅出Hibernate中文版 part2

    3.2 Hibernate配置 3.3 日志配置 3.4 第一段代码 3.5 代码初解 第4章 Hibernate基础 4.1 Hibernate基础语义 4.2 基础配置 4.3 Hibernate O/R映射 4.4 数据关联 4.5 Hibernate数据检索 4.6 HQL实用技术 ...

Global site tag (gtag.js) - Google Analytics