hibernate主键生成

一、主键 主键是关系数据库中的一个基本概念,它用来保证记录的唯一性主键都是没有业务含义的,所以开发 者不会、也不需要,显示地设置实体对象的主键值。但是对于数据库来说,主键是必须的 Hibernate内置了两类策略: 一类是JPA标准的主键生成策略,一类是Hibernate框架特有的主键生成策略。 JPA标准策略有4种:

1.auto策略(JPA默认的策略)如: public class Teacher {   private int id;   private String title;

@Id   @GeneratedValue(strategy = GenerationType.AUTO)   public int getId()   {     return id;   } } 我使用的 2.table策略(保存插入记录的时,需要的主键值)如: public class Teacher {   private int id;   private String title;

@Id   @GeneratedValue(strategy = GenerationType.TABLE,generator="myTableGenerator")   @TableGenerator(name = "myTableGenerator", table = "hibernateNeedTable",           pkColumnName = "pk_key", valueColumnName = "pk_value", pkColumnValue =  "teacherId",           initialValue = 100, allocationSize = 1000)   public int getId()   {     return id;   } } 3.sequence策略(为了使用序列)如: public class Teacher {   private int id;   private String title;

@Id   @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="mySeqGenerator")   @SequenceGenerator(name = "mySeqGenerator", sequenceName = "t_teacher_sequence",  initialValue = 1000, allocationSize = 50)   public int getId()   {     return id;   } } 这里需要配合使用@SequenceGenerator,用来指定序列的相关信息。 name:序列生成器的名称,会在@GeneratedValue中进行引用

sequenceName:oracle数据库中的序列生成器名称

initialValue:主键的初始值

allocationSize:主键每次增长值的大小 注意:如果底层数据库不执行序列,会报错:

org.hibernate.MappingException: org.hibernate.dialect.MySQLDialect does not support sequences

4.identity策略(提供了对自增主键的支持)如: public class Teacher {   private int id;   private String title;

@Id   @GeneratedValue(strategy = GenerationType.IDENTITY)   public int getId()   {     return id;   } }

二、总结

hibernate中一个数据模型的主键常用有三种形式:uuid、native、assigned,分别是通用唯一标识、自 增、自定义。 1、uuid是系统产生的,insert数据库时相比native要快很多,但是uuid是一长串无序字符串,理论上讲 查找起来会慢一点,但是不太会影响开发的。uuid即通用唯一标识,在不知道怎么定义主键时,它是不二的选择; 1.1、生成简单,java中已经有现成的东西,引入java.util.UUID, 1.2、通用唯一,其实可以加上全球,uuid的生成原理: 当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID, 则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没 有网卡以其他方式获得); 1.3、在任何时候两个相同数据表的数据放在一起不会出现主键冲突,这在实际开发中会带来很大的好处。 2、而native是数据库生成,在insert时会先计算所以会比uuid慢一点,但是在查找和删除数据时,会比较方便。 3、uuid和assigned的生成是在程序中完成的,一个是自动,一个是手动。所以在进行session.save() 时,不会产生sql语句,数据库中也不会有数据。而native需要读取数据库数据才能完成自动递增,所以 在执行session.save()时,就会产生相应的sql语句,数据库中就会有数据。

时间: 2024-11-07 05:46:20

hibernate主键生成的相关文章

160727、自定义hibernate主键生成策略生成字符串+数字自增长

需求:需要自增长注解如MyId0001.MyId0002.MyId0003 实现:实现这个接口org.hibernate.id.IdentifierGenerator 一.MyIdGenerator.java(测试用,实际项目中获取链接等可以改变) import java.io.Serializable; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import

java框架篇---hibernate主键生成策略

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

hibernate主键生成策略值sequence

主键生成策略采用sequence,但没有指定具体的sequence的时候,Hibernate会访问一个默认的sequence,是hibernate_sequence,我们也需要在数据库中建立这个sequence xml文件配置,采用默认seq <id name="pkId" type="java.math.BigDecimal"> <column name="PK_ID" precision="22" sca

Hibernate主键生成策略(转)

1.自动增长identity 适用于MySQL.DB2.MS 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

[转]hibernate主键生成策略

1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主键的setter方法给主键赋值,至于这个值怎么生成,完全由自己决定,这种方法应该尽量避免. <id name="id" column="id"> <generator class="assigned" /> </id&g

hibernate主键生成策略

引用:http://www.cnblogs.com/hoobey/p/5508992.html 1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主键的setter方法给主键赋值,至于这个值怎么生成,完全由自己决定,这种方法应该尽量避免. <id name="id" column="id"> <gene

初学Hibernate主键生成策略

具有业务含义的主键叫自然主键:随机生成,不具备业务含义的字段作为主键,叫代理主键. 在表与POJO类关系映射文件XXX.hbm.xml中,可通过配置id元素下generator节点的class属性指定数据表主键生成策略<generator class="生成策略"></generator>:所谓主键生成策略就是hibernate怎样管理表的主键 主键生成策略:1~4自动增长(1.2.3······),代理主键:5主键为字符串,代理主键:6一般用于自然主键,需要在

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

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

Java Hibernate 主键生成10大策略

本文将介绍Hibernate中主键生成的几种策略方案,有需要的朋友可以参考一下. 1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL Server 和 MySQL 的自增字段,这个方法不能放到 Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和 SQL Server 中很常用) 数据库中的语法如下: MySQL:create table t_u