Hibernate框架之主键的生成策略

在 Hibernate 框架中,要求所操作的对象必须要提供主键。主键是一个没有任何意义的唯一性标识,在 Hibernate 中的主键其实就是映射文件 class 标签下的 id 标签对应的那一列。主键的生成策略就是 generator 中 class 对应的值,主键有数字型和字符串型两种。

一、数字型主键的生成策略

  1. identify(自增)
    适用于 MySql、Sql Server、DB2 等数据库,是属于线程安全的,不连续的(也就是说,如果最后一条数据删掉了,那么下一个新增的数据的主键是删除掉数据主键 +1,所以在表中可以看到主键不是连续的。)
  2. increment(自增)
    实现原理是:每次新增的时候,都取数据库中当前最大的主键 id 值,加1,然后作为当前对象的主键 id,所以它是连续的,但是是线程不安全的,所以只适合单线程操作。
  3. sequence(序列)
    适用于 Oracle、DB2 等大型数据库,和 identify 相似,也是线程安全的。
  4. native(原生的)
    主键由数据库自动生成,程序不加干涉。

二、字符串型主键的生成策略

  1. uuid
    作为字符串型主键的代表
  2. uuid2
    这个是 Hibernate 特有的,Hibernate 对 uuid 进行二次封装后产生的结果。
  3. quid
    其表现形式和 uuid 很像,主要用于 Sql Server 和 Mysql 数据库。
  4. foreign
    主要用于 Hibernate 中配置一对一关系映射的时候。
    Hibernate框架之主键的生成策略