- Если два объекта равны, они должны иметь одинаковый хеш-код.
- метод equals () по умолчанию проверяет, ссылаются ли две ссылки на один и тот же экземпляр в памяти в куче Java
Вы можете полагаться на идентификатор сущности для сравнения вашей сущности, используя равно
public boolean equals(Object o) {
if(o == null)
return false;
Account account = (Account) o;
if(!(getId().equals(account.getId())))
return false;
return true;
}
Но что происходит, когда у вас есть непостоянная сущность. Это не будет работать , потому что его Идентификатор не был назначен.
Итак, давайте посмотрим, что говорит об этом Java Persistence с Hibernate Book
Бизнес-ключ - это свойство или некоторая комбинация свойств, , уникальная для каждого экземпляра с одинаковым идентификатором базы данных .
Итак
Это естественный ключ, который вы использовали бы , если бы вместо этого вы не использовали суррогатный первичный ключ.
Итак, давайте предположим, что у вас есть пользовательский объект, и его естественные ключи - firstName и lastName (по крайней мере, его / ее firstName и lastName часто не изменяются). Так что это будет реализовано как
public boolean equals(Object o) {
if(o == null)
return false;
if(!(o instanceof User))
return false;
// Our natural key has not been filled
// So we must return false;
if(getFirstName() == null && getLastName() == null)
return false;
User user = (User) o;
if(!(getFirstName().equals(user.getFirstName())))
return false;
if(!(getLastName().equals(user.getLastName())))
return false;
return true;
}
// default implementation provided by NetBeans
public int hashcode() {
int hash = 3;
hash = 47 * hash + ((getFirstName() != null) ? getFirstName().hashcode() : 0)
hash = 47 * hash + ((getLastName() != null) ? getLastName().hashcode() : 0)
retrun hash;
}
Работает отлично! Я использую даже с объектами Mock, такими как репозитории, сервисы и т. Д.
А по поводу метода toString (), как сказал @Bozho, вы можете поместить любую интересную информацию. Но помните, что некоторые веб-фреймворки, такие как, например, Wicket и Vaadin, используют этот метод для отображения его значений.