`
schy_hqh
  • 浏览: 558159 次
  • 性别: 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自动生成配置文件

    ### Hibernate自动生成配置文件详解 #### 一、Hibernate与自动生成配置文件的重要性 ...因此,掌握并熟练运用MyEclipse中Hibernate配置文件的自动生成功能,对任何级别的Java开发者来说都是一项极为有价值的技能。

    hibernate利用配置文件反向生成数据库所有配置文件及方法

    1. **Hibernate配置文件**(hibernate.cfg.xml):这个文件包含了连接数据库所需的基本信息,如数据库URL、用户名、密码等。 2. **实体关系数据库映射文件**(.hbm.xml):这些文件定义了Java类与数据库表之间的映射...

    Hibernate通过配置文件自动生成表

    本篇将详细讲解如何通过Hibernate配置文件自动生成数据库表,以及相关的知识点。 **一、Hibernate概述** Hibernate是Java平台上的一个开源框架,它的主要功能是提供一种映射机制,将Java类与数据库表进行对应,...

    Myeclipse自动生成Hibernate配置文件及实体类映射ORM

    Myeclipse 自动生成 Hibernate 配置文件及实体类映射 ORM 配置文件 Myeclipse 是一个功能强大的集成开发环境(IDE),它提供了许多实用的功能来简化软件开发过程。在这个示例中,我们将展示如何使用 Myeclipse 自动...

    用myeclipse自动生成hibernate配置文件

    MyEclipse作为一款强大的集成开发环境,提供了自动生成Hibernate配置文件的功能,帮助开发者快速构建项目。以下是使用MyEclipse自动生成Hibernate配置文件的详细步骤: 1. **创建数据库表**: 在开始之前,需要先...

    常用Hibernate主键生成策略

    - **缺点**:需要在Hibernate的配置文件中正确设置数据库方言,否则可能无法正常工作。 #### 四、配置示例 在Hibernate的XML映射文件中,可以通过以下方式进行配置: ```xml &lt;id name="实体类属性名" type="java....

    hibernate 配置文件 生成工具

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

    Hibernate中主键生成策略

    以下是对Hibernate中主键生成策略的详细解释。 1. **Identity策略**: 这种策略在数据库级别生成主键,常见于MySQL和SQL Server。当一个新对象被保存时,数据库会自动为该对象分配一个唯一的ID。在Hibernate中,...

    根据数据库表生成实体、hibernate配置文件和实体映射文件

    本教程将深入讲解如何根据数据库表自动生成实体类、Hibernate配置文件以及实体映射文件。 首先,我们需要了解Hibernate的基本概念。Hibernate提供了一个在Java应用中使用的持久化模型,它允许开发者用面向对象的...

    MyEclipse自动生成hibernate实体类配置文件

    7. **检查Hibernate配置文件**:此时,您应该能看到Hibernate配置文件已经自动生成。 8. **生成实体类映射**: - 在`Myeclipse DataBase Explorer`视图中,选择数据库连接,并右键选择`Open Connection...`,输入...

    hibernate完整配置文件

    Hibernate是Java领域中一款广泛应用的关系对象映射框架,它允许开发者用面向对象...这个“hibernate完整配置文件”压缩包应该包含了所有必要的配置和示例,是初学者和有经验的开发者深入理解Hibernate配置的宝贵资源。

    hibernate映射主键生成策略native

    其中,主键生成策略是Hibernate配置中的一个重要部分,它决定了表中的主键值如何生成。本文将重点介绍在Oracle数据库环境下,使用Hibernate的“native”策略来生成主键的具体方法及注意事项。 #### 二、主键生成...

    Hibernate映射文件主键的生成

    本篇文章将详细讲解Hibernate映射文件中关于主键生成的各种策略及其配置,帮助开发者更好地理解和使用。 首先,主键(Primary Key)是数据库表中用于唯一标识一条记录的字段,其值在表中必须是唯一的,并且通常不...

    现有Mysql数据库,写Spring + Hibernate的配置文件

    实体类需要使用Hibernate的注解进行标记,如@Entity表示这是一个数据库表,@Table指定表名,@Id和@GeneratedValue指定主键生成策略。 ```java @Entity @Table(name = "users") public class User { @Id @...

    自动生成hibernate映射文件和实体类

    最后,在 MyEclipse Enterprise 视图下,所有实体类以及配置文件已生成。这便完成了使用 MyEclipse 自动生成 Hibernate 映射文件和实体类的过程。 在这个过程中,我们可以了解到以下几个重要的技术点: 1. ...

    hibernate映射文件生成数据库

    本文将深入探讨如何利用Hibernate的映射文件来生成数据库,以此提高开发效率并减少手动创建数据库表的工作量。 一、Hibernate映射文件概述 Hibernate映射文件,通常以`.hbm.xml`为扩展名,是Hibernate用来定义Java...

    NHibernate2.0 实体类和配置文件生成模板

    总结来说,"NHibernate2.0 实体类和配置文件生成模板"是CodeSmith工具的一个应用实例,它简化了基于NHibernate的.NET项目中实体类和配置文件的创建过程,提升了开发效率。理解并熟练使用这些模板,有助于提升开发者...

    生成hibernate配置文件和xml的辅助类generate

    总的来说,理解并掌握如何生成Hibernate配置文件和XML映射文件的辅助类,是提升Java开发效率的一个重要环节。它涉及到Java反射、XML解析、文件操作等多个技术领域,同时也体现了软件工程中自动化和模块化的设计思想...

Global site tag (gtag.js) - Google Analytics