第八章 ID主键生成策略

increment

(选查找数据库中的主键生成,然后再把对象insert进去)

用于为long, short或者int类型生成 唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。

identity  

(主要用于mysql数据库)

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

对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。 返回的标识符是long, short 或者int类型的。 (数据库自增)

sequence

(主要用于Oracle)

在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。(数据库自增)

hilo

使用一个高/低位算法高效的生成long, short 或者 int类型的标识符。给定一个表和字段(默认分别是 hibernate_unique_key和next_hi)作为高位值的来源。 高/低位算法生成的标识符只在一个特定的数据库中是唯一的。

seqhilo

使用一个高/低位算法来高效的生成long, short 或者 int类型的标识符,给定一个数据库序列(sequence)的名字。

uuid (字符串)

用一个128-bit的UUID算法生成字符串类型的标识符, 这在一个网络中是唯一的(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串,它的生成是由hibernate生成,一般不会重复。

UUID包含:IP地址,JVM的启动时间(精确到1/4秒),系统时间和一个计数器值(在JVM中唯一)。 在Java代码中不可能获得MAC地址或者内存地址,所以这已经是我们在不使用JNI的前提下的能做的最好实现了

    String uuid = java.util.UUID.randomUUID().toString();

guid

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

native

跨数据库时使用,由底层方言产生。

根据底层数据库的能力选择identity, sequence 或者hilo中的一个。(数据库自增)

assigned

用户自定义id;

让应用程序在save()之前为对象分配一个标示符。这是 <generator>元素没有指定时的默认生成策略。(如果是手动分配,则需要设置此配置)

select

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

foreign

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

 

     复合主键(联合主键):多个字段构成唯一性。

时间: 2024-11-01 20:39:26

第八章 ID主键生成策略的相关文章

【hibernate】主键生成策略使用UUID报出如下警告:org.hibernate.id.UUIDHexGenerator - HHH000409: Using org.hibernate.id.UUIDHexGenerator which does not generate IETF RFC

主键生成策略使用UUID报出如警告如下: 控制台- 2017-11-24 18:40:14 [restartedMain] WARN org.hibernate.id.UUIDHexGenerator - HHH000409: Using org.hibernate.id.UUIDHexGenerator which does not generate IETF RFC 4122 compliant UUID values; consider using org.hibernate.id.UUI

JPA中的主键生成策略

Table 策略 (Table strategy) 这种策略中,持久化引擎 (persistence engine) 使用关系型数据库中的一个表 (Table) 来生成主键.这种策略可移植性比较好,因为所有的关系型数据库都支持这种策略.不同的 J2EE 应用服务器使用 不同的持久化引擎. 下面用一个例子来说明这种表生成策略的使用: 清单 1.Table 生成策略 @Entity public class PrimaryKey_Table { @TableGenerator(name = "PK_

常用Hibernate主键生成策略

今天学习到了关于Hibernate主键生成策略的问题,总结下,不足之处,请大家指出. Hibernate为优秀的持久层框架的代表.在传统的JDBC+JavaBean操作中,实体对象都由程序员自己去封装,然后返回.而在Hibernate中,采用对象关系映射『ORM』,大大简化了对数据库的操作. 在数据库的设计和操作中,我们通常会给表建立主键.主键,可以分为自然主键和代理主键. 自然主键表示:采用具有业务逻辑含义的字段作为表的主键.比如在用户信息表中,采用用户的身份证号码作为主键.但是这样一来,随着

Hibernate主键生成策略总结(这里面讲的很详细)

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

hibernate-Hibernate框架使用JPA注解时,使用的主键生成策略

问题描述 Hibernate框架使用JPA注解时,使用的主键生成策略 Hibernate框架使用JPA注解,在ID加上@GeneratedValue注解,使用的是什么主键生成策略?数据库生成了一张hibernate_sequence表.使用的是M有SQL数据库 解决方案 你用的sequence 这种策略吧,这是针对oracle 不提供自动增长的数据库类型的主键的生成方式 解决方案二: JPA使用Hibernate实现使用UUID.主键的生成策略.JPA学习笔记(4)--使用Table策略来生成主

hibernate5(5)实体映射注解配置[2]主键生成策略

@GeneratedValue基本注解类型 在上一篇文章中,我们讲到了JPA使用@GeneratedValue注解来定义生成策略,而关于注解生成策略有4种基本支持类型: 1. GenerationType.TABLES 当前主键的值单独保存到一个数据库的表中 2. GenerationType.SEQUENCE 利用底层数据库提供的序列生成标识符 3. GenerationType.IDENTITY 采取数据库的自增策略 4. GenerationType.AUTO 根据不同数据库自动选择合适的

hibernate 的主键生成策略小结

                                                                          hibernate主键生成策略1,increment:以递增的方式生成OID,每次增加一(hibernate在执行插入语句之前会执行一次查询,查询的结果为这个表中的id的最大值,然后加1处理在绑定到这个insert语句中)  <id name="userid" type="java.lang.Long">  

hibernate主键生成策略-为什么我的程序只有native方式生效(注解)

问题描述 hibernate主键生成策略-为什么我的程序只有native方式生效(注解) 我想采用uuid主键策略,但是多次各种尝试都不成功.我是通过往数据库插入数据测试的.重点是使用native能正常插入数据,而使用uuid就不行,主要原因是整个程序也不报错,就是运行了,看起来就像是跳过执行插入语句一样,实际上是执行到了插入方法的,也没有堆栈信息什么的可参考.代码如下: @Id @GeneratedValue (generator = "paymentableGenerator" )

java-hibernate如何配置mysql主键生成策略?

问题描述 hibernate如何配置mysql主键生成策略? 在之前的使用过程中,是用的oracle,只需要用注解的方式在主键上加@GeneratedValue,新增操作时,就可以自动生成主键了. 但是现在这个项目转为用mysql,用@GeneratedValue就会报"java.sql.SQLException: Field '***' doesn't have a default value" @Id @GeneratedValue @Column(name = "rol