主键类型之自然主键和代理主键
- 创建表的时候
- 自然主键:对象本身的一个属性.创建一个人员表,每个人都有一个身份证号.(唯一的)使用身份证号作为表的主键.自然主键.(开发中不会使用这种方式)
- 代理主键:不是对象本身的一个属性.创建一个人员表,为每个人员单独创建一个字段.用这个字段作为主键.代理主键.(开发中推荐使用这种方式)
- 创建表的时候尽量使用代理主键创建表
主键的生成策略
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