为具有生成ID的实体实现equals()时的最佳实践是什么

wil*_*nka 12 java hibernate

如果我有一个包含A,B,C,D列的表
 :自动生成的id(PK)
 B&C:组合必须是唯一的(这些是在商业意义上实际定义身份的列)
 D:其他一些列

现在,如果我将基于此表创建业务对象(例如,在Java中),哪一个将是equals()方法的更好实现:

  1. 基于A定义相等性
  2. 基于B和C定义相等性

或者,我选择哪两个并不重要.

Sea*_*oyd 21

肯定是B和C,因为你希望equals()合约在实体持久化之前是有效的.你说自己:

这些是在商业意义上实际定义身份的列

如果是这种情况,那就是逻辑equals()应该使用的.数据库密钥是数据库的关注点,应该与业务层无关.

并且不要忘记使用相同的属性hashcode().

  • 因为从业务角度来看,持久化实体和具有相同属性B和C的非持久化实体是相等的.业务角度不应该关心DB id这样的实现细节,这只与模型相关. (3认同)