Entities equals()、hashCode() 和 toString()。如何正确实现它们?

2022-09-01 09:58:44

我正在实现 ,并且我的实体使用 Bean 中的所有可用字段。equals()hashCode()toString()

当我尝试比较相等性或打印obj状态时,我在前端上得到了一些懒惰的初始化异常。这是因为实体中的某些列表可以延迟初始化。

我想知道实现和实体对象的正确方法是什么。equals()toString()


答案 1

equals()并且应该使用业务键实现 - 即一组唯一标识对象的属性,但不是其自动生成的ID。hashCode()

,您可以输入任何有趣的信息 - 例如所有字段。toString()

使用您的IDE(Eclipse,NetBeans,IntelliJ)为您生成所有这些。

为了避免 ,无论是在视图中还是在视图中 (jsp),都可以使用 OpenSessionInViewLazyInitializationExceptionequals()


答案 2

当您为 Hibernate 对象实现 equals 和 hashCode 方法时,重要的是

  1. 使用 getter 而不是直接访问类属性。
  2. 不直接比较对象的类,而是改用instanceof

更多信息:

Stackoverflow:重写-等于-和-hashcode-in-java

休眠文档:等于和哈希码

编辑:关于不直接访问类属性的相同规则也适用于toString方法 - 仅使用getters可以保证返回类中真正包含的信息。


推荐