在基本实体类上实现hashCode和equals(可能使用反射)?

时间:2011-03-04 03:40:14

标签: java hibernate jpa

我想知道在基本实体类中使用hashCode equals方法是否是一个好习惯,这样继承基类的其他实体类就不必编写自己的hashCode 1}}和equals方法?

现在我们所有的实体类都在使用apache的EqualsBuilderHashCodeBuilder,我们正在比较所有实体的属性。

由于我们必须为所有实体执行此操作,因此有点繁琐,所以我想知道(在基本实体中)是否可以使用反射和apache的PropertyUtil来循环实体的属性并生成正确的equalshashCode

3 个答案:

答案 0 :(得分:0)

应始终根据业务需求定制平等检查。不需要一个人适合所有人。在许多代码库中,我看到了相等性检查是由业务需求驱动的,并且有支持它的测试。

答案 1 :(得分:0)

如果您在实体的DDD概念中引用实体(具有与值对象或服务相反的身份的域对象),则是,您应该覆盖实体的基类相等比较,并根据实体的Key或Id属性确定相等性。

答案 2 :(得分:0)

听起来不错,前提是基类可以真正决定在确定相等性时包含哪些字段以及如何比较它们。

一般情况下,如果基类不能预测将要比较哪些子类,以及如何比较所有相关字段,则存在让基类进行比较的危险。对于典型情况下的实体类,您将不会遇到此问题。