hibernate框架学习之主键生成策略generator
Posted 架构师小跟班
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章