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


问题内容

如果我有一个包含A,B,C,D列的表,则
A:自动生成的ID(PK)
B和C:组合必须是唯一的(这些是从业务角度实际定义身份的列)
D:其他一些列

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

  1. 根据A定义相等
  2. 根据B和C定义相等

或者,我选择这两者中的哪一个都不重要。


问题答案:

绝对是B和C,因为您希望equals()合同在实体持久之前仍然有效。你说自己:

这些是从业务角度实际定义身份的列

如果是这样,那么equals()应该使用逻辑。数据库密钥是数据库的关注点,应该与您的业务层无关。

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