数据库主键生成策略

1.increment

可以生成long、int、short类型的主键,由hibernate在内存中生成主键,每次增量为1,不依赖于底层数据库,但是因为是由hibernate生成的,所以只能有一个hibernate进程访问数据库,否则就会产生主键冲突,所以不能在集群的情况下使用;

2.identity

可以生成long、int、short类型的主键,是由数据库自己生成的,这个主键必须设置为自增长,因此使用identity的前提是数据库支持自增长,oracle是不支持的;

3.sequence

采用数据库提供的sequence机制生成主键,需要数据库支持sequence,mysql是不支持的;

4.hilo

使用一个高低位算法生成的long、short、int类型的标识符,跨数据库;

5.native

根据底层数据库的能力选择identity、sequence或hilo中的一个,当项目中用到多个数据库时可以使用这种方式,使用时需要设置表的自增字段或建立序列,建立表等;

6.uuid

hibernate采用128位的uuid算法来生成主键,能够在网络环境中生成唯一的一个32位16进制数字的字符串,跨数据库,不用访问数据库就能生成主键,所以效率高且能保证唯一性,移植非常方便;

7.assigned

与hibernate和底层数据库均无关,人为控制主键的生成,应尽量避免;

8.foreign

使用另外一个相关联的对象的标识符,大多用在一对一关系中;


代理主键:与业务无关且能唯一标识数据库中记录,一般由数据库自动生成,除assigned之外的所有主键生成策略;

自然主键:与业务相关,由用户指定,且能唯一标识数据库中的任意一条记录,如assigned;




你可能感兴趣的:(数据库主键生成策略)