hibernate主键生成策略简单理解

导读:本篇文章讲解 hibernate主键生成策略简单理解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

主键类型之自然主键和代理主键

  • 创建表的时候
  • 自然主键:对象本身的一个属性.创建一个人员表,每个人都有一个身份证号.(唯一的)使用身份证号作为表的主键.自然主键.(开发中不会使用这种方式)
  • 代理主键:不是对象本身的一个属性.创建一个人员表,为每个人员单独创建一个字段.用这个字段作为主键.代理主键.(开发中推荐使用这种方式)
  • 创建表的时候尽量使用代理主键创建表

主键的生成策略

i ncrement 解): 适用于 short, i nt, l ong 主键. 使数据库自动增机制.

问题: 不能在集群环境下或者有并发访问的情况下使用,可能出现多线程冲突问题,两个线程同时查询 max(id),同时+1 ,insert

Hi bernat e 中提供的一种增长机制

再进行插入 : 获得最大值+1 作为新的记录的主键

先进行查询 : sel ect max( i d) f rom person;

i dent i t y: 用于 shor t, i nt, l ong 为主使用在有自动增长中. 是数据库机制

底层使用的是数据库的自动增长(aut o_i ncrement ). 像 Oracl e 数据库没有自动增长

sequence: 用于 short , i nt , l ong 作为主键. 使列的增长

Oracl e 数据库底层没有自动增长, 想自动增长需要使用序列

uui d: 适用于 char , varchar 类型的作为主键

用于 String 类型,生成代理主键,采用 uuid (32 位)作为主键值

Hibernate 会产生不重复的 32 字符串作为主键

使用随机的字符串作为主键

nat i ve: 本地策略. 根据底层的数据库不同, 自动选择适用于该种数据库的生成策略. (shor t , i nt , l ong)

如果底层使用的 MySQL 数据库: 相当于 i dent i t y

如果底层使用 Oracl e  数据库: 相当于 sequence

assi gned: 主键的生成不用 Hi bernat e 管理了. 必须手动设置主键

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/15242.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!