一个好老好老的老程序员了。
全部博文(915)
分类: Java
2007-09-17 12:58:44
“hilo”
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
“seqhilo”
与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。
“increment”
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。
“identity”
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。
“sequence”
采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。
“native”
由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。
“uuid.hex”
由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
“uuid.string”
与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据库中。
“foreign”
使用另外一个相关联的对象的标识符作为主键。
以下举例:
1、指定参数的情况:
SEQ_CHILD
使用的是sequence,适合oracle数据库;
2、对于sql server2000中的数据库子增字段,在配置文件使用下列方法实现:
这里主要是:identity:代表由sql server2000数据库自己提供子增字段.如果要hibernate自己提供,则用increment关键字来实现
3、如果表中的主键用字符串类型:可以用hibernate自己提供的方法实现主键唯一:
使用的是uuid.hex: 采用128位的算法来生成一个32位字符串。最通用的一种方式。适用于所有数据库。
1,increment 代理主键,由Hibernate自动以递增方式生成标识符,每次增量为1。 优点:不依赖于底层数据库系统,适用于所有的数据库系统。 缺点:只适用于单个Hibernate应用进程访问同一个数据库的场合,在集群环境下不推荐使用。 2,identity 代理主键,由底层数据库生成标识符。 前提条件:数据库支持自动增长字段类型。 数据库定义:MySql auto_increment MS SQL Server identity 3,sequence 代理主键,Hibernate根据底层数据库的序列来生成标识符。 前提条件:数据库支持序列。 4,hilo 代理主键,Hibernate根据high/low算法来生成标识符。 Hibernate把特定表的字段作为“high”值。在默认情况下选用hibernate_unique_key表的next_hi字段 5,native 代理主键,根据数据库自动识别类型,identity,sequence或hilo。 MySql和MS SQL Server :identity oracle : sequence 优点:适用于跨数据库平台开发。 6,assigned 自然主键 |