看了一下hibernate说明,对主键<id>配置的做下总结:
<id name="propertyName" (1) type="typename" (2) column="column_name" (3) unsaved-value="null|any|none|undefined|id_value" (4) access="field|property|ClassName" (5) node="element-name|@attribute-name|element/@attribute|."> (6) <generator class="generatorClass"/> (7) </id>
这是hibernate3的id可选配置项,做下解释,不对请指正:
(1) name: 对象属性的名称
(2) type: 对象属性的类型
(3) column:对象属性对应数据库中主键字段的名称
(4) unsaved-value:当进行级联保存时或使用saveOrUpdate时判断一个对象是新建的
还是已经存在在数据库中的原来的数据的标准,默认为null,当要操作的
对象的值和unsaved-value指定的值相等,说明是一个新的对象,自动
进行保存操作,否则进行更新操作。这样就解决了主键映射到对象的属性类型是
基本类型的情况。
(5)access: field--直接通过读取属性变量来获取值
property--通过get,set方法获取
ClassName--还不清楚这种情况,知道的说一声阿
(6)node:还没用过,查查去。(7)主键生成方式,我只用过identity(mssql2000),sequence(oracle9i)和assigned
下面是摘自hibernate手册的解释,可以看看:
increment 用于为long, short或者int类型生成 唯一标识。只有在没有其他进程往同一张表中
插入数据时才能使用。 在集群下不要使用。
identity 对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支
持。 返回的标识符是long, short 或者int类型的。
sequence 在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),
而在Interbase中使用生成器(generator)。返回的标识符是long, short或者
int类型的。
hilo 使用一个高/低位算法高效的生成long, short 或者 int类型的标识符。给定一个
表和字段(默认分别是是 hibernate_unique_key 和next_hi)作为高位值的来源。
高/低位算法生成的标识符只在一个特定的数据库中是唯一的。
seqhilo 使用一个高/低位算法来高效的生成long, short 或者 int类型的标识符,
给定一个数据库序列(sequence)的名字。
uuid 用一个128-bit的UUID算法生成字符串类型的标识符, 这在一个网络中是唯一的(
使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。
guid 在MS SQL Server 和 MySQL 中使用数据库生成的GUID字符串。
native 根据底层数据库的能力选择identity, sequence 或者hilo中的一个。
assigned 让应用程序在save()之前为对象分配一个标示符。这是 <generator>元素没
有指定时的默认生成策略。
select 通过数据库触发器选择一些唯一主键的行并返回主键值来分配一个主键。
foreign 使用另外一个相关联的对象的标识符。通常和<one-to-one>联合起来使用。