当前位置: 首页 > 知识库问答 >
问题:

确定@Entity类的相等性需要什么?

左劲
2023-03-14
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "PET_ID", unique = true, nullable = false)
    private long petId;
   /*getters and setters*/
@CrossOrigin()
    @RequestMapping(value = "/equalitytest", method = RequestMethod.PUT, produces = MediaType.APPLICATION_JSON_VALUE)
    public @ResponseBody Pet getEquality(@RequestBody Pet inputPet) {

        Pet res = null;

        List<Pet> pets = petRepo.findAll();

        for (Pet p : pets) {

            if (inputPet.equals(p)) {
                res = p;
            }
        }

        return res;
    }

这是一种错误或低效的做法吗?我读到过,当equals被重写时,重写hashcode始终是最佳实践,但我不知道在这种情况下是否需要这样做/应该如何实现它。

谢谢你。

共有1个答案

牧宁
2023-03-14

我认为这不是错误的或不有效的方法。

下面,一个模型供你遵循:

@Override
public int hashCode() {
    int hash = 0;
    hash += (componentId != null ? componentId.hashCode() : 0);
    return hash;
}

@Override
public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the componentId fields are not set
    if (!(object instanceof Component)) {
        return false;
    }
    Component other = (Component) object;
    if ((this.componentId == null && other.componentId != null) || (this.componentId != null && !this.componentId.equals(other.componentId))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "com.example.model.Component[ id=" + componentId + " ]";
}

附注1:在我的例子中,模型被称为组件。

 类似资料:
  • 相等性 当你要实现相等性的时候记住这个约定:你需要同时实现isEqual 和 hash方法。如果两个对象是被isEqual认为相等的,它们的 hash 方法需要返回一样的值。但是如果 hash 返回一样的值,并不能确保他们相等。 这个约定是因为当被存储在集合(如 NSDictionary 和 NSSet 在底层使用 hash 表数据的数据结构)的时候,如何查找这些对象。 @implementati

  • 问题内容: 您好,我正在构建Spring-Hibernate应用程序。我真的需要从下面进行配置吗? 我已经在我的root-context.xml中设置了注释驱动 现在是否不应该使用注释@Entity自动hibernate此包中的所有内容并将其转换为table?就目前而言,没有annotatedClasses的他不会从实体创建表 问题答案: 使用 文档,卢克! […] AnnotationSessi

  • 问题内容: 严格的相等运算符将告诉您两个对象 类型 是否相等。但是,有没有办法判断两个对象是否相等, 就像 Java中 的哈希码 值 一样 ? 与这个问题相似,但需要更多的学术答案。上面的场景演示了为什么必须要有一个,而我想知道是否有任何 等效的解决方案 。 问题答案: 简短的答案 简单的答案是:不,没有通用的方法可以确定一个对象是否与您所指的含义相等。例外是,当您严格考虑对象是无类型的时。 长答

  • 问题内容: 遵循JEP 286:局部变量类型推断描述 我想知道引入这种限制的原因是什么,例如: 因此,对我而言,逻辑上应该是: 因为Java编译器已经 可以 正确推断数组的类型: 那么有什么障碍呢? 问题答案: 每当我们提高Java中类型推论的范围时,我们都会得到“但是您也可以推论这一点,为什么不呢?”。(或者有时候,礼貌些。) 有关设计类型推断方案的一些一般性意见: 推理方案将始终具有局限性。总

  • 我想使用而不是,并重构了以下代码: 这个(版本2): 两者都返回相同的元素。然而,我怀疑我是否真的应该用的更详细的代码替换我所有的。为什么我需要在mapMuli(

  • 休假后回来:)带着问题。我正在阅读比较接口留档从比较文档。我明白,我们使用可比,因为它将为我们提供排序和自然排序。在留档中,它被写成。 强烈建议(尽管不是必需的)自然顺序与equals一致。这是因为没有显式比较器的排序集(和排序映射)在与自然顺序与equals不一致的元素(或键)一起使用时表现“奇怪”。特别是,这样的排序集(或排序映射)违反了用equals方法定义的set(或映射)的一般约定。 “