Правильный способ реализации контракта равных [дубликат]

На этот вопрос уже есть ответ:

Какие проблемы следует учитывать при переопределении equals и hashCode в Java? 11 ответов

У меня есть доменный объект с именем Пользователь. Свойства пользователя включают в себя ssoId, имя, адрес электронной почты, создалBy, madeDate и userRole. Из этих,ssoId должен быть уникальным в том смысле, что два пользователя не могут иметь одинаковый идентификатор sso. Поэтому мой метод equals проверяет идентификатор sso и возвращает либо true, либо false.

@Override public boolean equals(Object o) {
    if (!(o instanceof User))
      return false;
    return user.getSsoId().equals((User)o.getSsoId());
}

Я чувствую, что это неправильная реализация, хотя она верна в отношении бизнес-правил. Приведенная выше реализация вернет true для двух объектов с одинаковым идентификатором sso, но с разными значениями, скажем, name или email или обоих. Должен ли я изменить свой контракт на равенство, чтобы проверить равенство всех полей? Что вы предлагаете

Ответы на вопрос(4)

Ваш ответ на вопрос