标签:
在使用hiberrnate的时候不管是使用配置文件的方式还是注解的方式,实体类中都会牵扯到主键生成策略,今天来扒拉扒拉主键生成策略主要有哪些:
1.increment:为long、short或者int类型的主键生成唯一标识。只有在没有其他进程往表中添加数据的时候使用,不适合集群使用。
2.identity:在DB2、MYSQL(其他的一些数据库没用过,不清楚)等提供的identity(自增长)主键支持的数据表中使用,返回的标识属性值是long、short或者int类型。
3.sequence:在db2、oracle等提供sequence支持的数据表中使用。返回的标识属性值是long、short或者int类型。
4.hilo:使用一个高/低位算法高效的生成long、short或者int类型的标示符。给定一个表和字段(默认分别是hibernate_unique_key和next_hi)作为高位值得来源。高/低位算法生成的标识属性值只在一个特定的数据库中式唯一的。
5.seqhilo:使用一个高/低位算法高效的生成long、short或者int类型的标示符,需要给定一个数据库sequence名。该算法和hilo算法存在差异,它将主键历史状态保存在sequence中,因此只有支持sequence的数据库才支持,例如oracle数据库。
6.UUID:用一个128位的UUID算法生成的字符串类型的标示符。这在一个网络中是唯一的(IP地址也作为算法的数据源)。UUID被编码为一个32位十六进制的字符串。(UUID算法会根据IP地址、JVM的启动时间【可以精确到1/4秒】、系统时间和一个计数器值来生成一个32位的字符串,因此UUID在网络中是唯一的)。
7.guid:在Microsoft SQL server和MYSQL中使用数据库生成的GUID字符串。
8.native:根据底层数据库的能力选择identity、sequence或者hilo中的一个。
9.assigned:让应用程序在save()之前为对象分配一个标识符,这相当于不指定主键的生成策略
所采用的的默认策略。
10.select:通过数据库触发器选择某个唯一主键的行,并返回其主键值作为标识属性值。
11.foreign:表明直接使用另一个关联的对象的标识属性值(即本持久化对象不能生成主键),这种主键生成器只在基于主键的一对一关联映射中才使用。
我使用的MYSQL数据库比较多,所以用的最多的就是identity和native吧,在Oracle数据库中使用过sequence,其他的就没有使用过了吧,对了,还使用过UUID,最常用的就这几种吧。
其他的感觉好高大上,以后遇到了再慢慢研究。恩,就这样了,周末研究研究一对多、多对一这些对应关系。
标签:
原文地址:http://www.cnblogs.com/liaidai/p/4414766.html