假设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
场和其他人?
一方面,如果从业务逻辑的Angular 处理这个类,那么这样的equals就很方便了。但是当这个类必须从不同的Angular 来处理时,这样的等号可能是完全错误的和不好的。
如何决定?
3条答案
按热度按时间ehxuflar1#
当然,通过这种方式,您使用的是业务id,而不是jpa供应商可能生成的业务id,因此,被管理的实体与不被管理的实体相等。
例如,如果我们创建一个实体,其中id由数据库生成并保存,则以下不会给出错误:
在大多数情况下,这不是我们想要的。更多细节,我推荐这篇文章。
p3rjfoxz2#
你可以根据你的业务逻辑来超越等号。在我的例子中,我排除了id。您可以修改lombok库使用的字段:https://projectlombok.org/features/equalsandhashcode
例如:
vshtjzan3#
因为,有两种情况:
相等比较两个实体(内容)
通过标识符比较两个实体
你不应该重写
equals
要么做要么做。这会让人困惑。相反,每个函数都使用一个专用函数。通过这种方式,您/或其他阅读代码的人可以选择正确的代码,并且这种选择对读者来说是显而易见的。