常用的hibernate内置主键生成器说明

来源:互联网 发布:王欣认罪 知乎 编辑:程序博客网 时间:2024/06/10 20:47

我们在使用Hibernate的时候,该怎样配置主键生成器,此时就必须先对主键生成策略有一个基本的了解:

比如:

mysql不支持sequence增长方式, oracle不支持identity.

下面列出一张表,对hibernate内置主键生成器进行说明:

hibernate内置主键生成器一览表主键生成器说明increment适用于代理主键. 由Hibernate自动以递增的方式生成标识符. 每次增加1.
优点: 由于它的机制不依赖于底层数据库系统. 因此它适合于所有的数据库系统.
缺点: 只适合有单个Hibernate应用进程访问同一个数据库, 在集群环境下不推荐使用它. 另外, 需要注意:OID(主键)必须为
long, int , short类型, 如果为byte类型, 则会有异常.identity适用于代理主键. 由底层数据库生成标识符. 前提条件是底层数据库支持自动增长字段类型. (Oracle数据库不能用它)sequence适用于代理主键. Hibernate根据底层数据库的序列来生成标识符. 前提条件是底层数据库支持序列. (Oracle数据库能用它)hilo适用于代理主键. Hibernate根据high/low算法来生成标识符. Hibernate把特定表的字段作为"high"值. 在默认情况下选用
hibernate_unique_key表的next_hi字段. 它的机制.不依赖于底层数据库系统. 因此,它适合于所有的数据库系统. high/low
算法生成的标识符只能在一个数据库中保证唯一.native适用于代理主键.根据底层数据库对自动生成标识符的支持能力.来选择identity, sequence, hilo. 很适合于跨平台并发. 即同
一个Hibernate应用需要连接多种数据库系统.uuid.hex适用于代理主键. Hibernate采用128位的UUID算法来生成标识符. UUID算法能够在网络环境中生成唯一的字符串标识符.
这种标识符生成策略并不流行, 因为字符串类型的主键比整数类型的主键占用更多的数据库空间.assigned适用于自然主键. 由Java应用程序负责生成标识符, 为了能让Java应用程序设置OID(主键), 不能把setId()方法声明为private
类型. 应该尽量避免使用自然主键.


参考:

http://www.cnblogs.com/jimorulang/p/5522189.html