首页 > 解决方案 > equals 是否应该由应用程序的业务逻辑来负担?

问题描述

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

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

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

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

仅考虑该@override领域并考虑其他领域是否正确?equalsprofessionName

一方面,如果从业务逻辑的角度处理此类,那么等号会很方便。但是在必须从不同的角度处理这个类的情况下,这样的等号可能是完全错误的和不方便的。

如何决定?

标签: javascalahibernatejpakotlin

解决方案


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

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

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

在大多数情况下,这不是我们想要的。有关更多详细信息,我推荐这篇文章


推荐阅读