主键类分类
1、自然主键:
使用表本身的一个字段作为主键
例如:person的IDcard身份证号,IDcard本身属于person实体的一个属性。
2、代理主键
主键本身并不是表中的一个字段,也就是说不是实体的一个属性。
例如:person 的PID, ID等, pid和id 都不是person实体的一个属性。
在实际开发中尽量使用代理主键
在实际开发中一般不允许用户来设置主键,Hibernate提供了多主键生成策略。
(1)increment 使用hibernate的主键自增长策略,没有使用数据库的自增长,每次在插入之前都会执行去查询当前最大ID,然后+1,作为新插入记录的主键,在数据库集群下不要使用,适用与单线程程序。
(2)identity 使用数据库底层的自动增长,适用于数据库支持自增长的,例如MySql的自动增长,但是注意Oricle数据库没有自增长策略
(3)sequence 使用序列的实现ID生成策略,需要底层数据库支持,主要用于有序列的数据库。例如:Oracle,DB2。
(4)uuid 与java的uuid很相似,生成随机唯一字符串,主键必须是字符串类型。
(5)assigned 由程序来指定主键
(6)native 根据底层数据库自动选择identity 或者sequence
注:字符串主键是没有字增长的