数据库持久层开发之Hibernate主键

1,Assigned,主键的生成值完全由用户决定,与底层的数据库无关。用户需要维护主键值。要在调用session.save()前指定主键值。

2,Hilo,它其实是通过一种叫做hi/lo的算法来实现的主键生成机制。这种算法通常叫做高第位算法,Hi代表一个高位值,lo代表一个低位值,然后吧算法得到的两个值拼接起来作为数据库中的唯一主键。但这种方式需要额外的数据库表和字段,提高高位值来源。默认情况下这个表叫做hibernate_unique_key,默认字段叫做next_hi。并且必须保证next_hi字段有且只有一条记录。这种方式能保证同一个数据库中主键的唯一性,但不能保证多个数据库之间主键的唯一性。它与底层数据库无关。

3,Seqhilo,使用方法与Hilo方式类似,但要求底层数据库支持Sequence,入Oracle,DB2等。

4,Increment,它由Hibernate本身维护,适用于所有的数据库。但是它不适合多进程并发更新数据库,适合单一进程访问数据库,不能用于群集环境。

5,Identity,与底层数据库有关,要求数据库支持Identity,入MySQL中是auto_increment,SQLServer中是Identity。支持的数据库有MySQL,SQLServer,DB2,Sybase和HypersoncSQL。无需Hibernate和用户的干涉,使用较为方便,但不便于在不同的数据库之间移植程序。

6,Sequence,需要底层数据库支持序列,支持序列的数据库有DB2,Oracle,PostgreSQL,SAPDB等。在不同的数据库之间移植程序,特别从支持序列的数据库移植到不支持序列的数据库时需要修改配置文件。

7,Native,根据不同的底层数据库,采用不同的主键生成方式。入MySQL使用Identity方式,Oracle使用Sequence方式。由于Hibernate会根据底层数据库采用不同的映射方式,因此便于程序移植。项目中如果用到多个数据库时,可以使用Native方式。

8,UUID,能够保证数据库中主键的唯一性。生成的主键值占用比较多的存储空间。

9,Foreign,适合一对一关联关系中。

10,GUID,主键生成方式使用一种特殊的算法,保证主键的唯一性,支持SQLServer和MySQL。在使用SQLServer时,表定义中需要将字段的类型指定为“uniqueidentifier”。

以上就是Hibernate的十种主键生成方式,各有其特点,具体的采用那种方式还是的根据实际的应用,合理采用。

你可能感兴趣的:(oracle,mysql,Hibernate,算法,db2)