Hibernate框架的主键生成策略

  在Hibernate中,id元素的<generator>子元素用于生成持久化类的对象的唯一标识符,也就是主键。Hibernate框架中定义了许多主键生成策略类,也叫生成器类。所有的生成器类都实现了org.hibernate.id.IdentifierGenerator接口。通过实现IdentifierGenerator接口来创建自己的生成器类。Hibernate框架提供了许多内置的生成器类:

  • assigned
  • increment
  • sequence
  • hilo
  • native
  • identity
  • seqhilo
  • uuid
  • guid
  • select
  • foreign
  • sequence-identity

1、assigned

如果没有使用<generator>元素,assigned是默认的生成器策略。在这种情况下,应用程序为对象分配ID。

2、increment

当没有其他进程将数据插入此表时,它才会生成唯一的ID。它生成short,int或long型标识符。第一个生成的标识符通常为1,然后每次递增为1。

3.、sequencce

  它使用数据库的顺序序列。如果没有定义序列,它会自动创建一个序列。在Oracle数据库的情况下,它将创建一个名为HIBERNATE_SEQUENCE的序列。在DB2、SAP DB、Postgre SQL 或McKoi的情况下,它使用序列(sequence),但在interbase中使用生成器。使用sequence类型时,<generator>元素中药使用<param>子元素指定序列名称。

........
    <id...>
        <generator class="sequence">
                <param name="sequence">h_test</param>
        </generator>
    </id>
........

4.hilo

它使用高低算法来生成short,int和long类型的id。

5、native

它使用标识、序列或希洛取决于数据库供应商。

6、indentity

  它用于Sybase、Mysql、MS SQL Server、DB2和Hypersonic  SQL 支持id列。返回的ID类型为short、int或long。 

7、seqhilo

  它在指定的序列名称上使用高低算法。返回的ID类型为short、int和long。

8.uuid

  它使用128位UUID算法生成id。返回的ID是String类型,在网络中是唯一的(因为使用了IP)。UUID以十六进制数字标识,长度为32。

9、guid

  它使用由字符串类型的数据库生成的GUID。它适用于MS SQL Server  和MySQL。

10、select

  它使用数据库触发器返回主键。

11、foreign

  它使用另一个关联对象的id,主要用于一对一关联。 

12、sequence-identity

  它使用特殊的序列生成策略。仅在Oracle 10g驱动程序中支持。

备注:hilo和seqhilo生成策略的高低算法即hi/lo算法。hi:高值------从数据库取得的那个值;lo:低值------hibernate自动维护,取值1到max_low;max_low:映射文件中配置的那个值。

  

时间: 2024-10-07 22:09:36

Hibernate框架的主键生成策略的相关文章

Hibernate学习:主键生成策略

一:标准的JPA  Annotation方式的主键生成策略: (1)AUTO - 可以是identity column类型,或者sequence类型或者table类型,取决于不同的底层数据库. 例如mysql会使用auto_increment;如果oracle数据库,则使用hibernate_sequence. (2)TABLE - 使用表保存id值(也就是会为应用的表创建一张专门保存Id的表,记录对应的表的对应最大的ID值) (3)IDENTITY - identity column (4)S

Hibernate 表映射 主键生成策略与复合主键

主要分析三点: 一.数据表和Java类的映射 : 二.单一主键映射和主键的生成策略 : 三.复合主键的表映射 : 一.数据表和Java类的映射  Hibernate封装了数据库DDL语句,只需要将数据表和类之间实现映射,即可对数据表进行操作. 示例:数据库中存在表interface_admin.ds_area,实现表和类之间映射,其中单一主键oggKeyId,使用主键自动生成策略UUID,具体第二点进行阐述 . package com.pec.model; import java.io.Seri

Hibernate常用的主键生成策略

1.自动增长identity 适用于MySQL.DB2.SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL Server 和 MySQL 的自增字段,这个方法不能放到 Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和 SQL Server 中很常用) 数据库中的语法如下: MySQL:create table t_user(id int auto_increment primary key, name

Hibernate的ID主键生成策略

ID生成策略(一) 通过XML配置实现ID自动生成(测试uuid和native) 之前我们讲了除了通过注解的方式来创建一个持久化bean外,也可以在需要持久化的bean的包路径下创建一个与bean相同名字的hbm.xml文件来实现相同的功能! 例如: User.hbm.xml文件配置: 我们可以通过在id下指定<generator>来实现ID自动生成: <generator>的使用: class指向一个标识生成器,用于生成主键字段,以下是hibernate提供的几种常用的生成器:

Hibernate中联合主键生成策略

一.xml配置联合主键 单独设计一个类,作为主键类,如StudentPK A.实现序列化(Serializable接口) B.重写equals()和hashCode() 为什么要从写equals()和hashCode()方法? hashCode相同的会被存储在hash表的同一位置,当找到特定的hashcode之后,会根据equals()方法判断是否是相同的对象,来查找到对应的数据. 小实验1: (1)创建联合主键类StudentPK package com.zgy.hibernate.model

Hibernate主键生成策略总结(转)

Hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定关键字来告诉hibernate我们要使用的主键生成方式,然后hibernate会根据设定完成数据库的主键控制. 一.首先通过举例子来了解实体映射文件(*.hbm.xml)中对id生成策略配置格式 用户User的实体类User.java [java] view plaincopy package com.bjpowernode.hibernate; import java.util.Date; public class 

从实例看hibernate的主键生成策略

学习了hibernate会发现,hibernate中有实体类,实体类的映射文件,但是我们怎么样才能知道实体类的主键是怎样的生成方式呢?hibernate提供的主键生成策略帮我们完美地解答了这个疑问.下面让我们一起从实例开始认识hibernate的实体生成策略. 一.首先通过User实体类和映射文件的实例 ?User的实体类 package com.bjpowernode.hibernate; import java.util.Set; public class User { private in

hibernate框架(三)持久化类&amp;主键生成策略

一 持久化类的一个编写规则持久化:将内存中的一个对象持久化到数据库中的过程持久化类:一个Java对象与数据库的表建立了映射关系,那么这个类在hibernate中称为持久化类可以这么理解:持久化类=Java类+映射文件 持久化类的编写规则1 对持久化类提供一个无参的构造方法2 属性需要私有,对私有属性提供get和set方法3 对持久化类提供一个唯一标识Oid与数据库中主键对应4 持久化类中属性尽量使用包装类类型5 持久化类不要使用final进行修饰 二 主键生成策略先介绍一下主键的分类:自然主键和

三大框架 之 Hibernate生成策略与缓存策略(主键生成策略、持久化、持久化类划分、一级缓存、事物管理)

目录 Hibernate生成策略与缓存策略 主键生成策略 主键分类 主键的生成策略 持久化 什么是持久化 什么是持久化类 持久化类编写规则 持久化类的划分 三种状态区分 持久态对象特征 一级缓存 什么是缓存 一级缓存 一级缓存特点 一级缓存内部结构 事务管理 什么是事务 事务特性 事务的隔离级别 Hibernate设置事务的隔离级别 事务业务层连接 Hibernate生成策略与缓存策略 主键生成策略 主键分类 自然主键 主键本身就是表中的一个字段 实体中一个具体的属性,对象本身唯一的特性 创建一