4.ID主键生成策略
保证唯一性(auto_increment)
一、xml方式
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.bjsxt.hibernate.model">
<class name="Student" table="t_student" dynamic-update="true">
<id name="id" >
<generator class="native"></generator>
</id> <property name="name"></property>
</class>
</hibernate-mapping>
<id> 标签必须配置在 <class>标签内第一个位置。由一个字段构成主键,如果是复杂主键<composite-id> 标签
<generator> 元素 (主键生成策略)
如:<generator class="native"/> 根据是什么数据库,自动选择,mysql默认是 'identity' 即 auto_increment
<generator class="uuid "/> 用一个128-bit的UUID算法生成字符串类型的标识符 在Mysql类型是 varchar(255)
二、annotation方式
在相应的get方法上使用@GeneratedValues(strategy=GeneratedType)
strategy 取值:如:strategy=GenerationType.AUTO
1.AUTO(默认值) - 可以是identity column类型,或者sequence 类型 或者 table 类型取决于不同的底层数据库 相当于 native
1、对于mysql,使用auto_increment
2、对于oracle使用hibernate_sequence(名称固定)
2.TABLE - 使用表保存id值
就是在数据库中建立一个表,这个表包含两个字段,一个字段表示名称,另一个字段表示值。
每次在添加数据时,使用第一个字段的名称,来取值作为添加数据的ID,然后再给这个值累加一个值再次存入数据库,以便下次取出使用。
@Entity
@javax.persistence.TableGenerator(
name="Teacher_GEN", //生成策略的名称
table="GENERATOR_TABLE", //在数据库生成表的名称
pkColumnName = "pk_key", //表中第一个字段的字段名 类型为varchar,key
valueColumnName = "pk_value", //表中第二个字段的字段名 int ,value
pkColumnValue="teacher", //这个策略中使用该记录的第一个字段的值(key值)
initialValue = 1, //这个策略中使用该记录的第二个字段的值(value值)初始化值
allocationSize=1 //每次使用数据后累加的数值
)
@GeneratedValue(strategy=GenerationType.TABLE,generator="Teacher_GEN")
3.IDENTITY - identity column
对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。
返回的标识符是long, short 或者int类型的。 (数据库自增)
注意:此生成策略不支持Oracle
4.SEQUENCE - sequence
在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),
而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。(数据库自增)
注意:此生成策略不支持MySQL
联合主键(多个字段构成唯一性)
<hibernate-mapping package="com.bjsxt.hibernate.model">
<class name="Student" table="t_student">
<composite-id name="pk" class="com.bjsxt.hibernate.model.StudentPK">
<key-property name="id"></key-property>
<key-property name="name"></key-property>
</composite-id> <property name="age" />
<property name="sex" />
<property name="good" type="yes_no"></property>
</class>
</hibernate-mapping>
1.xml方式
a)建立复合主键类 (必须实现Serializable接口)
b)在实体类中引用复合主键类
c)student.hbm.xml 映射文件
<composite-id name="studentPK" class=>
<key-property name="id"/>
<key-property name="name"/>
</composite-id>
2.annotation方式
三种方法:一般用 2 3
@Entity
@Table(name="t_teacher")
/*@IdClass(TeacherPK.class)*/
public class Teacher {
private int id;
private String name;
/*private TeacherPK tfk;*/ private int age;
private String teach;
private Date birthday;
private Gender gender;
/*@EmbeddedId
public TeacherPK getTfk() {
return tfk;
}
public void setTfk(TeacherPK tfk) {
this.tfk = tfk;
}*/
1.将组件类(TeacherPK)注解为 @Embeddable,并将组件的属性(getTPk())注解为@Id
2.将组件的属性 (getTPk()) 注解为 @EmbeddedId
3.将类(Teacher)注解为@IdClass,并将该实体类中所有属于主键的属性都注解为@Id
注:不管哪种方式 联合主键类(如:Teacherpk) 需要
1.实现 Serializable 接口
2.需要重写equals 和 hashCode方法
(Teacher类 存到 DB中 需要保证Teacher对象中联合主键唯一,所以需要有equals和hashCode)
4.ID主键生成策略的更多相关文章
- Hibernate学习笔记(三)Hibernate生成表单ID主键生成策略
一. Xml方式 <id>标签必须配置在<class>标签内第一个位置.由一个字段构成主键,如果是复杂主键<composite-id>标签 被映射的类必须定义对应数 ...
- Hibernate的ID主键生成策略
ID生成策略(一) 通过XML配置实现ID自己主动生成(測试uuid和native) 之前我们讲了除了通过注解的方式来创建一个持久化bean外.也能够在须要持久化的bean的包路径下创建一个与bean ...
- hibernate(二)主键生成策略
hibernate主键生成策略主要指的是在实体类orm的配置 <id name=""> <generator class="native"&g ...
- 【hibernate】主键生成策略使用UUID报出如下警告:org.hibernate.id.UUIDHexGenerator - HHH000409: Using org.hibernate.id.UUIDHexGenerator which does not generate IETF RFC 4122 compliant UUID values;
主键生成策略使用UUID报出如警告如下: 控制台- 2017-11-24 18:40:14 [restartedMain] WARN org.hibernate.id.UUIDHexGenerator ...
- Hibernate(4)——主键生成策略、CRUD 基础API区别的总结 和 注解的使用
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: hibernate的主键生成策略 UUID 配置的补充:hbm2ddl.auto属性用法 注解还是配置文件 h ...
- hibernate主键生成策略
在hibernate中,提供了多种主键生成器(不同的数据库,不同的表结构使用的主键生成策略也不相同),查阅相关资料经过实验总结如下: 1.increment 主键按照数值顺序递增,使用当前实例中最大值 ...
- Hibernate主键生成策略(转)
1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL Server 和 MySQL ...
- hibernate 注解 主键生成策略
一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue ...
- 大家一起撸代码之——Hibernate各种主键生成策略与配置详解
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
随机推荐
- Eclipse中给SVN添加项目
SVN添加项目, 1.在svn资源库中的目标路径上右键,新建一个远程文件夹,文件夹名称和项目名称一致即可. 2,在新建的远程目录上右键,选导入,导入我们要放到svn的本地项目. 3.导入时选中项目的名 ...
- 找不到FileProvider类怎么办?找不到R资源怎么办?APPT2错误怎么办?
坑2: 在使用上述解决方案时,需要加入android.support.v4.content.FileProvider这个类,当时我没有这个包.但是在引入相应的依赖包后,各种异常就出现了. 先是把And ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-1.SpringBoot整合微信支付开发在线教育视频站点介绍
笔记 第一章项目介绍和前期准备 1.SpringBoot整合微信支付开发在线教育视频站点介绍 简介: 课程介绍,和小D课堂在线教育项目搭建开发 1.课程大纲介绍 2.微信支付项 ...
- Ubuntu 安装 docker,并上传到dockerhub
一.安装Docker apt-get -y install docker.io 链接: ln -sf /usr/bin/docker.io /usr/local/bin/docker 检查docker ...
- 两种最常用的破解centos7忘掉密码的解决方案
第一种方法:设置光盘为第一启动项 第一步:进入bios界面 虚拟机中:点击左上角的虚拟机-->电源-->打开电源时进入固件 第二步:使用左右键选择上方的boot 按住shift+ 加号 ...
- Java网络编程简明教程
Java网络编程简明教程 网络编程 计算机网络相关概念 计算机网络是两台或更多的计算机组成的网络,同一网络内的任意两台计算机可以直接通信,所有计算机必须遵循同一种网络协议. 互联网 互联网是连接计算 ...
- Linux学习笔记:shell
目录 通配符 特殊符号 变量 环境变量 默认变量 shell script case if for until while function 本文更新于2019-08-23. 通配符 *:0个至无穷多 ...
- mybatis 传递多个查询参数
方法1:顺序传参法 public User selectUser(String name, int deptId); <select id="selectUser" resu ...
- ZOJ Problem Set - 1006
注意:A的ascii为65,a为97就行了 其他没什么,略过. 代码参看: http://my.oschina.net/dianpaopao/blog/124545
- 什么是JWT(Json Web Token)
什么是 JWT (Json Web Token) 用户认证是计算机安全领域一个永恒的热点话题. JWT 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519). 该to ...