hibernate主键生成策略简单理解

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

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

主键的生成策略

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 管理了. 必须手动设置主键

猜你喜欢

转载自blog.csdn.net/qq_39809458/article/details/81113657