1.Assigned

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

特点:主键的生成值完全由用户决定,与底层数据库无关。用户需要维护主键值,在调用session.save()之前要指定主键值。

2.Hilo

Hilo使用高低位算法生成主键,高低位算法使用一个高位值和一个低位值,然后把算法得到的两个值拼接起来作为数据库中的唯一主键。Hilo方式需要额外的数据库表和字段提供高位值来源。默认请况下使用的表是

hibernate_unique_key,默认字段叫作next_hi。next_hi必须有一条记录否则会出现错误。

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

3.Increment

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

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

4.Identity

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

特点:与底层数据库有关,要求数据库支持Identity,如MySQl中是 auto_increment, SQL Server 中是Identity,支持的数据库有MySql、SQLServer、DB2、Sybase和HypersonicSQL。 Identity无需Hibernate和用户的干涉,使用较为方便,但不便于在不同的数据库之间移植程序。

5.Sequence

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

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

6.Native

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

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

7.UUID

UUID使用128位UUID算法生成主键,能够保证网络环境下的主键唯一性,也就能够保证在不同数据库及不同服务器下主键的唯一性。

特点;能够保证数据库中的主键唯一性,生成的主键占用比较多的存贮空间

8.Foreign

Foreign用于一对一关系中,保证生成主键的唯一性,支持SQL Server和MySQL。

mysql修改主键生成策略信息_常用Hibernate 主键生成策略相关推荐

  1. mysql自增主键到头了怎么办_自增主键用完了怎么办

    在面试中,大家应该经历过如下场景 面试官:"用过mysql吧,你们是用自增主键还是UUID?" 你:"用的是自增主键" 面试官:"为什么是自增主键?& ...

  2. 常用Hibernate 主键生成策略(徐瑞文)

    ORM映射基本原理 1. 基于相同实体类和表,实现相互映射,类的对象对应了表中的记录,不同对象对应不同的记录,不同的记录对应不同的对象 2. 表中不同的记录通过主键来区分,不同的对象通过对象id来区分 ...

  3. mysql 生成短网址_短网址服务(TinyURL)生成算法

    前不久做了一个优惠劵的分享功能,其中一个功能就是生成一个优惠劵分享短链接.生成的短链接要求每个链接都是唯一的,并且长度尽可能短.在网上查了一下相关的思路,发现了一个不错的算法.这个算法的思路就是用[a ...

  4. linux mysql 修改密码之后还是不能登录_怎样在Linux下搭建接口自动化测试平台?...

    前言 之前在学习HttpRunner时,我们都是把用例写在 YAML/JSON 中进行维护,使用起来也很方便.其实,现在有不少大佬都喜欢开发自动化测试平台,比如我们今天要搭建的HttpRunnerMa ...

  5. 解决mysql不能修改密码_如何解决mysql修改密码后不能成功登录_数据库_mysql修改密码_课课家...

    今天给大家解决下MySQL修改密码后导致不能登录的问题,一般我们都知道mysql4.1.1版本后修改了用户密码的格式,一旦修改了密码,4.1.1以前的版本上是不能进行成功登录的,那么对于这些问题该如何 ...

  6. 华为手机主界面的返回键怎么调出来_华为手机返回键怎么调整 怎么设置返回键...

    新买的手机不管怎么流畅,一旦用的时间长了之后不清理内存,手机就会越来越卡,为避免手机速度变慢,有必要及时清理,让软件缓存对手机使用不造成影响,.那么下面就让我们来看一下华为手机返回键怎么调整?华为手机 ...

  7. mysql l查看历史等锁信息_查看锁信息(开启InnoDB监控)

    一.背景 在mysql处理死锁问题时,由于show engine innodb status输出来的死锁日志无任务事务上下文,并不能很好地诊断相关事务所持有的所有锁信息,包括:锁个数.锁类型等. 于是 ...

  8. mysql查看当前数据库的连接信息_查看 mysql 数据库当前连接数

    命令:mysql> show processlist; 或者 # mysqladmin -uroot -p密码 processlist 如果是root帐号,你能看到所有用户的当前连接.如果是其它 ...

  9. mysql修改配置文件内存后无法启动_记一次Oracle实例在修改内存大小后无法启动的惊悚经历...

    事件回首: 晚上11点加班中,开发中产品将在第二天向大客户演示.突然一大群测试同学消息轰炸:500,服务崩了.我发请求一看,Oracle挂了,简单.因为开发中使用的云服务器资源占用快爆了,时不时会出现 ...

最新文章

  1. 手机号验证_国际手机号收不到微博验证短信,微博验证短信一直提示超过上限怎么办?...
  2. java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题
  3. 负载均衡mysql的使用_使用负载均衡集群集化 MySQL - Azure Virtual Machines | Microsoft Docs...
  4. 教你学习CI框架codelgniter——CI框架基本配置
  5. 宋宝华:公元1024年Linux内核的尘封往事
  6. docker介绍与应用
  7. matlab中函数迭代法,Matlab 数值计算----斯特芬森加速迭代法
  8. /分数化简和加减乘除
  9. 淘宝客返利机器人源码编写教程.
  10. 《美食街》项目---(登录篇){ ‘blur‘焦点属性,resetFields(),meta对象,$confirm,window.location.href=‘/‘}
  11. 如何设置 IntelliJ IDEA 主题和字体
  12. VBA学习_4:运算符
  13. tensorflow之四运转方式入门
  14. 魔众EDM邮件营销系统 v1.0.0 专业的EDM邮件营销系统
  15. 记一次nginx配置自定义错误页面的麻瓜经历
  16. 搭建日志服务器 rsyslog
  17. Python打包源码
  18. Pr CC 2017安装一直提示缺少MSVCR120.dll
  19. html表格不能横向自动展示,html table表格列数太多添加横向滚动条
  20. 2021-08-28web培训作业2(sql实战注入尝试getshell,googlehacking,数据库拿到账户信息登录后台管理,fck的upload)

热门文章

  1. asp.net core mvc View Component 应用
  2. NuGet社区使用体验调查
  3. Visual Basic的未来之路
  4. Django04-1: ORM增删改查
  5. pdo连接mysql数据库(简洁明了)
  6. Android之library class android.webkit.WebViewClient depends on program class android.net.http.SslErro
  7. Android之Camera介绍
  8. Android之判断网络状态(网络的连接,改变,和判断2G/3G/4G)
  9. 由于开发者通过接口修改了菜单配置_Android SDK开发艺术探索(四)个性化配置...
  10. oracle 删除空间不足,oracle表空间扩容、创建、删除(解决表空间不足问题)