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 ...
随机推荐
- Linux记录-定时crontab
/etc/crontab文件和crontab -e命令区别 1.格式不同 分 时 日 月 星期 要运行的命令 第1列分钟1-59 第2列小时1-23(0表示子夜) 第3列日1-31 第4列月1-12 ...
- Expressions versus statements in JavaScript
Statements and expressions An expression produces a value and can be written wherever a value is exp ...
- Linux日志痕迹清除
#coding=utf-8 import os import sys import subprocess def Clear_The_Log(host): logs = ["/var/log ...
- MySQLMySql免安装版安装配置
MySql免安装版安装配置,附MySQL服务无法启动解决方案 mysql 5.6.17 绿色版(免安装)安装配置教程 [mysql] # 设置mysql客户端默认字符集 default-charact ...
- IO流--与properties集合配合使用
IO流--与properties集合配合使用: 注:生产上主要用于常量文件的配置,读取常量文件: 1:properties集合的放值与取值: /* * properties集合继承自hashTable ...
- SignalR 2.x入门(二):SignalR在MVC5中的使用
开发(代码下载) 新建一个ASP.NET Web项目,项目类型为MVC,将认证模式改为无身份认证.在程序包管理控制台输入如下语句,安装SignalR <span style="font ...
- [Windows] [DLL] [动态链接库技术]
cppblog.com 天空的博客 http://www.cppblog.com/API/archive/2011/03/10/141506.html cnblogs.com 吴秦的博客 http:/ ...
- 1.redis安装
一.安装 1.安装 tar fvxz redis-3.0.7.tar.gz ln -s redis-3.0.7 redis cd redis make && make install ...
- 【codeforces 870F】Paths
Description You are given a positive integer n. Let's build a graph on vertices 1, 2, ..., n in such ...
- rabbitMQ学习2-Python与rabbitmq
python客户端 # rabbitmq官方推荐的python客户端pika模块 pip3 install pika 应用场景1:单发送单接收 1.生产-消费者模型 P 是生产者 C 是消费者 中间h ...