初学Hibernate主键生成策略
具有业务含义的主键叫自然主键;随机生成,不具备业务含义的字段作为主键,叫代理主键。
在表与POJO类关系映射文件XXX.hbm.xml中,可通过配置id元素下generator节点的class属性指定数据表主键生成策略<generator class="生成策略"></generator>;所谓主键生成策略就是hibernate怎样管理表的主键
主键生成策略:1~4自动增长(1、2、3······),代理主键;5主键为字符串,代理主键;6一般用于自然主键,需要在程序里指定主键值,无法自动生成
1、increment;代表主键是自动增长的,是由hibernate本身来管理。
注意:数据库要支持自动增长,如MySQL,SQLserver;Oracle不可以;在多线程情况下,可能会产生主键冲突问题
2、identity;由底层数据库生成,不由hibernate本身来管理
注意:数据库支持自动增长,如MySQL,SQLserver;Oracle不可以;
3、sequence;标识符生成器利用底层数据库提供的序列来生成标识符
注意:数据库支持序列,和hibernate程序无关,如Oracle支持,而MySQL就不可以;如Oracle数据库有序列customer_seq,则配置如:<generator class="sequence">customer_seq</generator>
4、native;标识符依据底层数据库对自动生成标识符的支持能力,来选择使用identity,sequence,或hilo标识符生成器,如MySQL自动选择identity,Oracle自动选择sequence
5、uuid;主键是字符串的可以用uuid来处理,随机产生32字符串
6、assigned;一般用于自然主键,无法自动生成,需要程序指定值
7、复合主键;需要在配置文件里指定复合主键id;如有Person类和Person表,Person表有复合主键firstName和secondName,和age字段
<hibernate-mapping>
<!-- 类与表关系,name类全名称,table表名 -->
<class name="cn.hjp.domain.Person" table="Person">
<!-- 复合主键 -->
<composite-id>
<key-property name="firstName"></key-property>
<key-property name="secondName"></key-property>
</composite-id>
<property name="age" column="age" type="int"></property>
</class>
</hibernate-mapping>
注意:Person类必须实现序列化接口Serializable
初学Hibernate主键生成策略的更多相关文章
- java框架篇---hibernate主键生成策略
Hibernate主键生成策略 1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL ...
- 基于按annotation的hibernate主键生成策略
基于按annotation的hibernate主键生成策略 博客分类: Hibernate HibernateJavaJPAOracleMySQL 这里讨论代理主键,业务主键(比如说复合键等)这里不 ...
- 160727、自定义hibernate主键生成策略生成字符串+数字自增长
需求:需要自增长注解如MyId0001.MyId0002.MyId0003 实现:实现这个接口org.hibernate.id.IdentifierGenerator 一.MyIdGenerator. ...
- jpa基于按annotation的hibernate主键生成策略
JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar下载 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hib ...
- hibernate主键生成策略
在hibernate中,提供了多种主键生成器(不同的数据库,不同的表结构使用的主键生成策略也不相同),查阅相关资料经过实验总结如下: 1.increment 主键按照数值顺序递增,使用当前实例中最大值 ...
- Hibernate主键生成策略(转)
1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL Server 和 MySQL ...
- hibernate主键生成策略(转载)
http://www.cnblogs.com/kakafra/archive/2012/09/16/2687569.html 1.assigned 主键由外部程序负责生成,在 save() 之前必须指 ...
- [转]hibernate主键生成策略
1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识使用SQL Server 和 MySQL 的 ...
- Hibernate主键生成策略及选择
1 .increment:适用于short,int,long作为主键,不是使用数据库自动增长机制 这是hibernate中提供的一种增长机制 在程序运行时,先进行查询:select max(id) f ...
随机推荐
- C# 将透明图片的非透明区域转换成Region
以下代码实现将一张带透明度的png图片的非透明部分转换成Region输出 /// <summary> /// 根据图片得到一个图片非透明部分的区域 /// </summary> ...
- C语言 生成随机数
#include<stdio.h> #include<time.h> #include<Windows.h> void main1(){ //定义一个时间类型 ti ...
- bzoj roll题器(Py大法好)
此roll题器能实现非权限号跳过权限题及所有号跳过已切题 点击下载rar文件(py2) 点击下载rar文件(py3)
- php基础26:文件与目录1
<meta charset="utf-8"> <?php //绝对路径 $path = "E:\AppServ\www\php\/33-catalog. ...
- ListView缓存机制踩过的坑
ListView,GrildView使用时候经常会用到缓存机制,随意一搜,例子成千上万,但是讲解都是很一致,跟自己踩的坑很少有人讲解到. 测试 需求: GrildView 分三列显示,默认背景为白色, ...
- [CareerCup] 12.4 Test a Webpage 测试一个网页
12.4 How would you load test a webpage without using any test tools? 这道题问我们如何不用任何测试工具来加载测试一个网页.加载测试可 ...
- valueOf和toString
有一道经典的题目: var add = function() {___}; console.log(add(3)(4)(5)); // 输出60 题目要求能无限相乘,请补充add函数. 首先很显然,a ...
- 浅谈JS事件冒泡
今天要跟大家谈的是事件冒泡,这个事件呢,也是两面性的,有时候给我们带来bug,有时候优点也很明显.我们就一起来看看它的真面目. 首先看看事件冒泡是什么? 事件冒泡 :当一个元素接收到事件的时候 会把 ...
- 一个基于.NET平台的自动化/压力测试系统设计简述
AutoTest系统设计概述 AutoTest是一个基于.NET平台实现的自动化/压力测试的系统,可独立运行于windows平台下,支持分布式部署,不需要其他配置或编译器的支持.(本质是一个基于协议的 ...
- EventBus框架在Android多Pane(Fragment)中的应用
通常多pane的设计中,比如Fragment A是个Headline,Fragement B是detail,那么B通常需要实现A的点击事件的接口,这样子的话,两个fragment就高耦合了,而且需要在 ...