我在Eclipse生成的equals
方法上遇到了一些问题。
假设我有一个实体Bean,其属性为entityId
和name
,但是我只是选择了entityId
属性来生成相等项。因此,eclipse生成的代码如下:
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Entity other = (Entity) obj;
if (entityId == null) {
if (other.entityId != null)
return false;
} else if (!entityId.equals(other.entityId))
return false;
return true;
}
问题是,当比较类Entity
的两个不同实例并将null
作为entityId时,equals
方法返回true。
对我来说,这种equals
实现是不正确的(至少在与JPA一起使用时),因为没有entityId
的两个实体只是要(可能)保留为新对象的对象数据库中的对象。如果我将这两个对象添加到Set中(例如一对多关系),则在两次插入之后,Set中将只有一个元素(Set不允许重复)。
所以,问题是为什么Eclipse会生成这样的equals方法?您认为使用以下代码实现equals
方法更好吗?
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Entity other = (Entity) obj;
if (entityId == null) {
if (other.entityId != null)
return false;
else
return true;
} else if (!entityId.equals(other.entityId))
return false;
return true;
}
答案 0 :(得分:2)
Eclipse根本不知道如何使用您的类。
通常,如果字段具有相等的值,则对象被视为相等
class Human {
String name;
String petName;
}
Human("Bob", null)
等于Human("Bob", null)
。
您的情况有些特殊,因此您必须自己进行调整。