gpt4 book ai didi

java - 我应该在 JPA 实体中编写 equals() 和 hashCode() 方法吗?

转载 作者:IT老高 更新时间:2023-10-28 20:25:43 25 4
gpt4 key购买 nike

我想检查实体是否在另一个实体的集合成员(@OneToMany@ManyToMany)中:

if (entity2.getEntities1().contains(entity1)) { }

最佳答案

不一定。共有三个选项:

  • 不要覆盖 - 这样您将使用实例。当您使用仅附加到 session 的实体的集合(因此保证是相同的实例)时,这很好。这(对我而言)在许多情况下是首选方式,因为它在覆盖时需要更少的代码和更少的考虑

  • 用业务 key 覆盖 hashCode()equals()。这可能是标识实体的属性的子集。例如,对于 User,一个好的业务 key 可能是 usernameemail。这被认为是好的做法。

  • 仅使用 ID 字段覆盖 hashCode()equals()。在某些情况下这很好,特别是如果您有手动分配的标识符(如 UUID)。如果您的实体永远不会进入集合,那也很好。但是对于进入集合的 transient 实体(没有标识符),它会导致问题,所以要小心这个选项。正如 seanizer 所指出的 - 你应该避免它。一般来说,总是,除非你真的知道你在做什么(并且可能记录下来)

See this article更多细节。另请注意,equals()hashCode() 是绑定(bind)的,应该使用完全相同的字段来实现。

关于java - 我应该在 JPA 实体中编写 equals() 和 hashCode() 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4388360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com