java - equals 是否应该由应用程序的业务逻辑来负担?
问题描述
假设我们在 Java 项目中有这样的类:
@Entity
class Person {
@Id
String internalId;
@OneToMany
Set<Profession> profession;
}
@Entity
class Profession {
@Id
String id;
String professionName;
Integer yearsOfPractise;
}
在业务逻辑中professionName
,每个人必须是唯一的。
仅考虑该@override
领域并考虑其他领域是否正确?equals
professionName
一方面,如果从业务逻辑的角度处理此类,那么等号会很方便。但是在必须从不同的角度处理这个类的情况下,这样的等号可能是完全错误的和不方便的。
如何决定?
解决方案
当然,通过这种方式,您使用的是业务 ID,而不是可能由 jpa 供应商生成的业务 ID,因此,被管理的实体与不被管理的实体相同。
例如,如果我们创建一个实体,其中 id 由数据库生成并保存,则以下内容不会出错:
Entity entity = new Entity();
Entity savedEntity = entityRepository.save(entity); // CrudReporitory
assertFalse(entity.equals(savedEntity));
在大多数情况下,这不是我们想要的。有关更多详细信息,我推荐这篇文章。
推荐阅读
- java - 如果元素为空,则尝试修改 Java Vector 的 get() 以生成新的 T()
- python - LSTM 实现/过拟合
- discord.py - 如何让机器人转发其 DM
- python - 如何只打印列表中的一个索引
- c - 编译时出现 C2148 的结构
- typescript - 接口在用作函数的返回类型时允许额外的属性
- php - 如何将htmlentities插入mysql?
- php - 注意:未定义的变量:碎屑
- javascript - 如何将 css 应用于 textarea 标签内用逗号分隔的文本?(React.js 项目)
- python - 如何用 PyParsing 解析这个字符串?