У меня возникли некоторые проблемы с методом equals
, сгенерированным Eclipse.
Предположим, у меня есть Entity 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
являются просто объектом, который (вероятно) будет сохранен какновые объекты в базе данных.Если я добавлю эти два объекта в набор (например, отношение один ко многим), после двух вставок в нем будет только один элемент (наборы не допускают дублирование).
Итак,Вопрос в том, почему 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;
}