hibernate框架学习之主键生成策略generator
1)手工控制
assigned(不限制类型)
2)数据库自动生成
uuid(字符串类型)
increment(整型数值类型)
identity (整型数值类型)
sequence (整型数值类型)
native(整型数值类型)

assigned策略是由程序员手工控制输入数据模型OID的一种id生成策略
assigned策略不限定数据库中id字段的类型
assigned策略无法保障id的不重复性
assigned策略通常配合外部自定义的id生成策略使用,否则将具有很大的风险性
assigned策略对于集群式数据库id控制相对简单些,也可以理解为“为所欲为”
后期配合一些主键自增工具类(UuidService)完成
在UuidService基础上加入缓存机制有效提升其效率
=======
uuid策略是由以下4种数据联合计算得出的一种OID生成策略
IP地址
JVM启动时间(精确到250ms)
当前系统时间
JVM提供的计数器(保障唯一)
uuid策略要求数据库中id字段为字符串类型
uuid策略可以保障id的唯一性,因此不具有风险性
=========
increment策略是由Hibernate内部控制生成OID的一种id生成策略
increment策略要求数据库中id字段为整型数值类型
increment策略首先从对应数据库表中取出当前已使用的最大id值max,然后在此基础上+1,提供给当前要操作数据,完成主键唯一性增长,可兼容数据库
increment策略虽然可以保障id的唯一性,但是如果多个连接同时对一个表进行操作时,可能获取到相同的max值,导致相同id的出现,因此需要更多的配置,来控制数据库的并发策略
=====
identity策略是由数据库底层控制生成OID的一种id生成策略
identity策略要求数据库中id字段为整型数值类型,并且要求设置成自增特性
identity只能应用于数据库提供主键自增策略的数据库实现,不能全兼容所有数据库,MySQL可用
identity策略由数据库底层实现,即便申请了一个id不使用,也不影响下一个id的获取,因此线程安全
=========
sequence策略是由数据库底层控制生成OID的一种id生成策略
sequence策略要求数据库中id字段为整型数值类型
sequence只能应用于提供序列支持的数据库实现,不能全兼容所有数据库,Oracle可用
sequence策略由数据库底层实现,id生成控制交由数据库管理,是线程安全的策略
============
native策略是一种设计性OID生成策略
native会根据你所使用的数据库类型,在下列各种生成策略中自动选择对应的id生成策略
identity
sequence
hilo
==========
复合主键/联合主键/多主键
复合主键指在一个数据模型使用两个或两个以上的属性来作为唯一性标识用于区分数据
复合主键在目前的开发中极少使用,主要是为了兼容早期的遗留系统
复合主键开发方式:

复合主键与主键只能选择其中一种使用
hibernate框架学习之主键生成策略generator的更多相关文章
- Hibernate框架笔记02_主键生成策略_一级缓存_事务管理
目录 0. 结构图 1. 持久化类的编写规则 1.1 持久化和持久化类 1.2 持久化类的编写规则 2. 主键生成策略 2.1 主键的分类 2.2 主键生成策略 3. 持久化类的三种状态[了解] 3. ...
- (转) Hibernate持久化类与主键生成策略
http://blog.csdn.net/yerenyuan_pku/article/details/65462930 Hibernate持久化类 什么是持久化类呢?在Hibernate中持久化类的英 ...
- Hibernate之:各种主键生成策略与配置详解
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
- java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询
持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...
- Hibernate(4)——主键生成策略、CRUD 基础API区别的总结 和 注解的使用
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: hibernate的主键生成策略 UUID 配置的补充:hbm2ddl.auto属性用法 注解还是配置文件 h ...
- Hibernate的几种主键生成策略
主键类型: 业务主键(natural key):业务主键的值是来源于一个业务数据. 代理主键(surrogate key):代理主键需要采用一种方式来生成某个唯一值. 代理主键的生成策略: 1.hib ...
- Hibernate遇到oracle之主键生成策略
一直用Hibernate+mysql,感觉Hibernate很好用,也出过什么大问题:这周,公司的产品要部署到Orecle,虽然产品号称支持Oracle但是我自己知道,这个产品压根儿就没在Oracle ...
- hibernate(二)主键生成策略
hibernate主键生成策略主要指的是在实体类orm的配置 <id name=""> <generator class="native"&g ...
- hibernate框架学习笔记4:主键生成策略、对象状态
创建一个实体类: package domain; public class Customer { private Long cust_id; private String cust_name; pri ...
随机推荐
- C# Serializable
System.SerializableAttribute 串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上,在取消串行化时,对象会被还原,且不能与其原 ...
- 转载 IEnumerable和IEnumerator 详解
初学C#的时候,老是被IEnumerable.IEnumerator.ICollection等这样的接口弄的糊里糊涂,我觉得有必要切底的弄清楚IEnumerable和IEnumerator的本质. 下 ...
- Http状态码解释
参考:urllib与urllib2的学习总结(python2.7.X) # Table mapping response codes to messages; entries have the # f ...
- SQL Server进阶(十一)临时表、表变量
临时表 本地临时表 适合开销昂贵 结果集是个非常小的集合 -- Local Temporary Tables IF OBJECT_ID('tempdb.dbo.#MyOrderTotalsByYe ...
- 开源框架.netCore DncZeus学习(二)配置连接
配置连接字符串,update-database,初始数据后,访问报错,提示offset错误.因为本机上使用的sql2008. .net Core 2.X中的EF访问sqlserver2008默认使用的 ...
- redis的持久化方案
Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化. Redis支持两种方式的持久化,一种是RDB方 ...
- 十一、移植优化---CONFIG 优化进 menuconfig(1)
在移植 JZ2440 中,include/configs/jz2440.h 中有很多config 项都是已经在 uboot 的主配置中已经存在了的,这些配置造成了重复,需要优化. 先将原先的 smdk ...
- MVC中的分部视图
背景: 项目的工期马上就要到了,由于后台封装的很好,我们只需要用心熟悉框架,接下来后台的工作就是简单的代码工作了.原本以为最困难的时期已经过去,可没想到前台才是最困难的. B/S的基础十分薄弱,加上B ...
- 测试四则运算2:Right-BICEP
n6个值得测试的具体部位,他们能够提高你的测试技巧 nRight-结果是否正确? nB-是否所有的边界条件都是正确的? nI-能查一下反向关联吗 nC-能用其他手段交叉检查一下结果吗? nE-你是否可 ...
- JS算法练习四
JS算法练习 1.将使用空格分隔单词使用驼峰命名连接起来: var str="HELLO world welcome to my hometown"; /*--先输入一个有空格分隔 ...