① increment
自增,每次增长1, 适用于所有数据库. 但是不要使用在多进程,主键类型是数值型
select max(id) from Student
② identity
自增,每次增长1, 适用于支持identity的数据(mysql,sql server), 主键类型是数值
③ sequence
④ native
会根据数据类型来选择,使用identity,sequence ,hilo
select hibernate_sequence.nextval from dual
主键类型是数值long , short ,int
<id name="id" type="java.lang.Integer">
<generator class="native"/>
</id>
⑤ hilo
hilo标识符生成器由Hibernate按照一种high/low算法生成标识符
用法:
<id name=”id” type=”java.lang.Integer” column=”ID”>
<generator class=”hilo”>
<param name=”table”>my_hi_value</param>
<param name=”column”>next_value</param>
</generator>
</id>
⑥ uuid
会根据uuid算法,生成128-bit的字串
主键属性类型不能是数值型,而是字串型
⑦ assigned
用户自己设置主键值,所以主键属性类型可以是数值,字串
⑧ 映射复合主键
⑨ foreign
在one-to-one的关系中,有另一张表的主键(Person) 来决定 自己主键/外键( IdCard)
给出一个简单原则:
针对oracle [主键是int/long/short 建议使用 sequence] 主键是String 使用uuid或者assinged
针对 mysql [主键是 int/long/short 建议使用increment/assigend ,如果是字串 UUId/assigned]
针对 sql server [主键是 int/long/short 建议使用 identity/native/assinged ,如果主键是字串,使用uuid/assigned ]
one-to-one 又是基于主键的则使用foreign