应确保正确设置主键的原因有以下几个原因。
首先,由于将更多属性标记为主要属性,计算对象的密钥签名的成本变得很高。如果“用户”的所有字段都被标记为主要字段,则对于每个用户,系统将必须访问每个属性,并计算一个包括每个属性的值的签名。如果一个字段引用了另一个对象,则问题会变得更复杂。因此,具有“客户机数据”的主键通常应该与数据库主键遵循相同的规则:单个字段(最好是整数)是最有效的键。更复杂的键,包括缺省情况下生成的键(每个有效的单个字段都被标记为主要字段),与最简单的键一样工作,但是性能更低。
其次,必须避免主要属性中存在引用循环。例如,如果“用户”对象拥有一个“地址”,而“地址”又具有一个指针指向该“用户”对象,并且 user.address 和 address.user 都是主要字段,则在确定这两个对象的标识时就会存在无限循环。这是很直观的,但是在代码中很难控制。在这种情况下,只要 Java 对象一致,系统就会工作:“地址”指向的“用户”对象刚好就是指向“地址”对象的 Java“用户”对象,以便简单对象引用等同性测试(例如,theUser = theUser.getAddress().getUser())返回 true。
最后,这是一个更棘手的问题,假设所有字段都被认为是主要字段(缺省值),并且您对给定对象进行了更改,则您已丢失对象的先前标识。因为所有字段都是标识的一部分,所以任何更改都会使标识发生改变。这是一个实际问题,尤其使当使用框架的更高级的功能时,例如,在 WebServices 中,用户可能已经在浏览器修改了对象,您期望在服务器中反映此更新。
使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.