java - equals 是否应该承受应用程序的业务逻辑的负担?

标签 java scala hibernate jpa kotlin

假设我们在 Java 项目中有这样的类:

@Entity
class Person {
  @Id
  String internalId;
  @OneToMany
  Set<Profession> profession;
}

@Entity
class Profession {
  @Id
  String id;
  String professionName;
  Integer yearsOfPractise;
}

在业务逻辑中,每个人的professionName必须是唯一的。

仅考虑帐户的professionName字段并忽略其他字段,@overrideequals是否正确?

一方面,如果从业务逻辑角度处理此类,则此类 equals 会很方便。但是,当必须从不同的角度处理此类时,这样的 equals 可能是完全错误且不方便的。

如何决定?

最佳答案

当然,通过这种方式,您使用的是业务 ID,而不是可能由 jpa 供应商生成的 ID,因此,管理的实体与非管理的实体相同。

例如,如果我们创建一个实体,其中 id 由数据库生成并保存它,则以下内容不会出现错误:

Entity entity = new Entity();
Entity savedEntity = entityRepository.save(entity); // CrudReporitory
assertFalse(entity.equals(savedEntity));

大多数情况下这不是我们想要的。更多详情我推荐this article .

关于java - equals 是否应该承受应用程序的业务逻辑的负担?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54843257/

相关文章:

java - Appium 上由 FluentWait.until 引起的 "NoSuchMethodError"

scala - 属性错误 : 'list' object has no attribute 'map'

java - Spring + hibernate +Maven : jCannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL 'jdbc:mysql//localhost:3306/test'

java - 如何在 JPA 查询中应用忽略大小写

java - 公司及其员 worker 数的 JPA 标准查询

java拦截器不拦截

java - 使用 servlet 时出现 Netbeans 错误

java - Android - 获取多段线作为图像

scala - 动态创建测试 sbt

scala - combineLatest 仅在其中一个流发生变化时发出