对具有生成ID的实体实施equals()时的最佳实践是什么
问题内容:
如果我有一个包含A,B,C,D列的表,则
A:自动生成的ID(PK)
B和C:组合必须是唯一的(这些是从业务角度实际定义身份的列)
D:其他一些列
现在,如果我将基于该表(例如,在Java中)创建业务对象,那将是equals()方法的更好实现:
- 根据A定义相等
- 根据B和C定义相等
或者,我选择这两者中的哪一个都不重要。
问题答案:
绝对是B和C,因为您希望equals()
合同在实体持久之前仍然有效。你说自己:
这些是从业务角度实际定义身份的列
如果是这样,那么equals()
应该使用逻辑。数据库密钥是数据库的关注点,应该与您的业务层无关。
并且不要忘记在中使用相同的属性hashcode()
。