Hibernate框架之主键的生成策略
在 Hibernate 框架中,要求所操作的对象必须要提供主键。主键是一个没有任何意义的唯一性标识,在 Hibernate 中的主键其实就是映射文件 class 标签下的 id 标签对应的那一列。主键的生成策略就是 generator 中 class 对应的值,主键有数字型和字符串型两种。
一、数字型主键的生成策略
- identify(自增)
适用于 MySql、Sql Server、DB2 等数据库,是属于线程安全的,不连续的(也就是说,如果最后一条数据删掉了,那么下一个新增的数据的主键是删除掉数据主键 +1,所以在表中可以看到主键不是连续的。) - increment(自增)
实现原理是:每次新增的时候,都取数据库中当前最大的主键 id 值,加1,然后作为当前对象的主键 id,所以它是连续的,但是是线程不安全的,所以只适合单线程操作。 - sequence(序列)
适用于 Oracle、DB2 等大型数据库,和 identify 相似,也是线程安全的。 - native(原生的)
主键由数据库自动生成,程序不加干涉。
二、字符串型主键的生成策略
- uuid
作为字符串型主键的代表 - uuid2
这个是 Hibernate 特有的,Hibernate 对 uuid 进行二次封装后产生的结果。 - quid
其表现形式和 uuid 很像,主要用于 Sql Server 和 Mysql 数据库。 - foreign
主要用于 Hibernate 中配置一对一关系映射的时候。