“increment” 主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。(只有在没有其他进程往同一张表中插入数据时才能使用。 ) “identity” 采用class="tags" href="/tags/ShuJuKu.html" title=数据库>数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。 “sequence” 采用class="tags" href="/tags/ShuJuKu.html" title=数据库>数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。 “native” (本地) 由 Hibernate 根据使用的class="tags" href="/tags/ShuJuKu.html" title=数据库>数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。 “uuid.hex” 由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。“uuid.string” 与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL class="tags" href="/tags/ShuJuKu.html" title=数据库>数据库中。 “foreign” 使用另外一个相关联的对象的标识符作为主键。
以下举例: 1、指定参数的情况: <id name="id" unsaved-value="0"> <class="tags" href="/tags/GENERATOR.html" title=generator>generator class="sequence"> <param name="sequence">SEQ_CHILD</param> </class="tags" href="/tags/GENERATOR.html" title=generator>generator> </id> 使用的是sequence,适合oracleclass="tags" href="/tags/ShuJuKu.html" title=数据库>数据库;
2、对于class="tags" href="/tags/SQLSERVER.html" title=sql server>sql server2000中的class="tags" href="/tags/ShuJuKu.html" title=数据库>数据库子增字段,在配置文件使用下列方法实现: <id name="id" type="long" unsaved-value="0"> <column name="id" sql-type="numeric" not-null="true" /> <class="tags" href="/tags/GENERATOR.html" title=generator>generator class="identity" /> </id> 这里主要是:identity:代表由class="tags" href="/tags/SQLSERVER.html" title=sql server>sql server2000class="tags" href="/tags/ShuJuKu.html" title=数据库>数据库自己提供子增字段.如果要class="tags" href="/tags/HIBERNATE.html" title=hibernate>hibernate自己提供,则用increment关键字来实现 3、如果表中的主键用字符串类型:可以用class="tags" href="/tags/HIBERNATE.html" title=hibernate>hibernate自己提供的方法实现主键唯一: <id name="id" type="string" unsaved-value="null"> <column name="cid" sql-type="char(32)" not-null="true" /> <class="tags" href="/tags/GENERATOR.html" title=generator>generator class="uuid.hex" /> </id> 使用的是uuid.hex: 采用128位的算法来生成一个32位字符串。最通用的一种方式。适用于所有class="tags" href="/tags/ShuJuKu.html" title=数据库>数据库。
*进阶篇 在Hibernate中实现自己的主键生成器(id Generator) http://www.javaeye.com/topic/119240