1.Assigned(常用)

Assigned方式由程序生成主键值,并且要在save()之前指定,否则会抛出异常。

特点:逐渐的生成值完全由用户决定,于底层数据库无关。用户需要维护主键值,在调用session.save()之前要指定主键值。注意:int auto_increment类型主键除外

2.Hilo

Hile使用高低位算法生成主键,高低位算法使用一个高位值和一个低位值,然后把算法得到的俩个值拼接起来作为数据库中的唯一主键。Hile方式需要额外的数据库表和字段提高位来源。默认情况下使用的表是hibernate_unique_key,默认的字段叫做next_hi。next_hi必须有一条记录否则会出现错误。

特点:需要额外的数据库表的支持,能保证同一个数据库中主键的唯一性,但不能保证多个数据库之间主键的唯一性。Hilo主键生成方式由Hibernate维护,所以Hilo方式与底层数据库无关,但不应该手动修改hi/Io算法使用的表的值,否则会引起主键重复的异常。

3.increment

Increment方式对主键采取自动增长的方式生成新的主键值,但要求底层数据库的支持Swquence。如Oracle,DB2等。需要在映射文件xxx.hbm.xml中添加Increment标识符的设置。

特点:由HIbernate本身维护,适用于所有的数据库,不适合多进程并发更新数据库,适合单一进程访问数据库。不能用于群集环境。

4.Identity(常用)

Identity当时根据底层数据库,来支持自动增长,不同的数据库用不同的主键增长方式。

特点:于底层数据库有关,适用于MySQl,DB2,MSSQL Server,采用数据库生成的主键,用于为long,short,int类型生成唯一标识。使用SQL Server和MySQL的自增字段,这个方法不能放到Oracle中,Oracle不支持自增字段,要设定sequence(MySQL和SQL Server中很常用)Identity无需Hibernate和用户的干涉,使用较为方便,但不便与在不同的数据库之间移植程序。

Mysql:create table t_user(id int auto_increment primary key,name varchar(20));

SQL Server:create table t_user(id int identity(1,1) primary key,name varchar(20));

5.Sequence(常用)、

Sequence需要底层数据库支持Sequence方式,例如Oracle数据库等

特点:需要底层数据库的支持序列,支持序列的数据库有DB2,PostgreSql,oracle,SAPDb等。在不同数据库之间移植程序,特别从支持序列的数据库移植到不支持序列的数据库需要修改配置文件

Oracle:create sequence seq_name increment by 1 start with 1;需要主键时可以调用seq_name.nextval或者seq_name.cruval得到,数据库会帮助我们维护这个sequence序列,保证每次得到的值唯一。如:

insert into table_name(id,name) values(seq_name.nextval,'lisi");

seq_name

6.native(常用)

Native主键生成方式会根据不同的底层数据库自动选择Identity,Sequence,Hilo主键生成方式。

特点:根据不同的底层数据库采用不同的主键生成方式。由于hibernate会根据底层数据库采用不同的映射方式,因此便于程序移植,项目中如果用到多个数据库时,可以使用这种方式。

7.UUid

UUid使用128位UUID算法生成主键,能够保证网络环境下的主键唯一性,生成的主键占用比较多的存储空间。

有关主键生成策略的Annotation注解

@Id @GenerateValue @GenericGenerator

java mysql 主键生成策略_主键生成策略相关推荐

  1. mysql 主键 聚集索引_主键索引就是聚集索引吗?

    这个问题很刁钻! 答案是错的. 的确在mysql数据库innodb引擎里面,主键的确就是聚集索引. 但是myisam引擎里面主键也不是聚集索引. 另外在sql server中还可以显示的指定聚集索引. ...

  2. mysql主键约束代码_主键约束(示例代码)

    第一范式要求每张表都要有主键,因此主键约束是非常重要的,而且主键约束是外键关联的基础条件.主键约束为表之间的关联提供了链接点. 主键必须能够唯一标识一条记录,也就是主键字段中的值必须是唯一的,而且不能 ...

  3. templet 显示字段外键对应名_主外键和外键约束

    主外键和外键约束 主键 主键(primary key):一列(或一组列),其值能够唯一区分表中每个行 . 外键 外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个 ...

  4. java 唯一id生成算法_唯一ID生成算法剖析

    在业务开发中,大量场景需要唯一ID来进行标识:用户需要唯一身份标识:商品需要唯一标识:消息需要唯一标识:事件需要唯一标识-等等,都需要全局唯一ID,尤其是分布式场景下. 唯一ID有哪些特性或者说要求呢 ...

  5. 对抗生成网络_深度卷积生成对抗网络

    本教程演示了如何使用深度卷积生成对抗网络(DCGAN)生成手写数字图片.该代码是使用 Keras Sequential API 与 tf.GradientTape 训练循环编写的. 什么是生成对抗网络 ...

  6. python 网格策略_『量化经典策略』网格策略

    最近心血来潮寻思把量化投资的一些经典策略都总结下,供感兴趣的朋友参考. 网格策略:是一种捕捉盘整行情的隔30点或其他合适的点数设置买点和平仓点的交易策略,主要思想就是在股价比设定的基准价下跌时逐渐加仓 ...

  7. mysql添加数据不阻塞_主键表插入数据不提交,外键表插入数据被阻塞

    有客户和我说:他在含主外键的表中实验发现,在主表数据未提交,然后在外键表插入该数据数据时,出现外键表hang住现象.我开始以为是不同的会话,根据oracle数据库的一致性原则,应该新会话在外键表中不能 ...

  8. mysql数据库时间不准确_主数据库(mysql)的时间不对

    今天早上领导通知我讲主数据库的时间不对,Linux的系统时间是对的.怎么回事???难道是我以前更改了系统时间造成??怎么解决呢? 在mysql手册中有下面这段话: 5.10.8. MySQL服务器时区 ...

  9. 主键主键外键和索引_主键和外键的目的/用途是什么?

    主键主键外键和索引 Primary and foreign keys are a way in which to constrain related data together to ensure d ...

最新文章

  1. Microsoft Remote Desktop移动客户端QA
  2. RandomAccessFile学习笔记
  3. python人工智能方向面试准备_高薪直通车丨人工智能+Python面试经验分享(西安**思数据)...
  4. 分享20个非常有用的Web开发工具和框架
  5. c++ 人脸识别_应用层下的人脸识别(四):人脸研判
  6. 最优化——对偶问题的性质(弱对偶性,强对偶性),对偶问题形式的书写(对偶规则)
  7. 使用nginx+tomcat实现动静分离
  8. 最强鸿蒙系统txt_鸿蒙系统升级时间确认,哪些手机有望成为首批“宠儿”?
  9. jmstemplate 获取队列id_学习Linux(38)消息队列
  10. 某易游戏经典吃豆豆动画404页面源码
  11. IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权
  12. 深入浅出python系列(一):基本数据类型
  13. 记一次awvs14安装、破解之路~
  14. 川崎机器人f控制柜接线图_东莞Kawasaki机器人控制柜维修中心
  15. mybatisplus删除操作引起的selectBatchIds报错
  16. DCO-OFDM可见光通信matlab
  17. 手势识别整体设计流程方案
  18. 斩获微软offer后,我总结出这10个面试必备技巧(五星干货)
  19. 爬虫之点触验证码的识别
  20. 基于遥感影像的道路提取论文、开源代码和数据集汇总

热门文章

  1. 【ML】理解偏差和方差,过拟合和欠拟合
  2. C#调用自定义表类型参数
  3. 软件工程理论方法与实践
  4. 浏览器的加载顺序与页面性能优化
  5. C#中DataGradView控件的常用操作
  6. HTML参考系列(1)-文本格式化标签
  7. 局域网中服务器群配置ssh免密
  8. Shell中各种括号的作用:()、(())、[]、[[]]、{}、>、>>、$()、${}
  9. 优化Nginx的处理性能
  10. Zabbix触发器配置指定生效星期监控CPU使用率