Проверьте, существует ли объект User в @DBRef List<User>

Я использую MongoDB, Spring Data и Spring MVC. У меня есть модель пользователя, которая имеет список контактов:

class User {
@DBRef
private List<User> contacts = new ArrayList<User>(); 

public List<User> getContacts() {
    return contacts;
}
}

В настоящее время у меня есть 4 пользователя в моей базе данных. 1 пользователь имеет определенный контакт (который упоминается в той же коллекции по идентификатору).

Теперь я хочу проверить, есть ли у пользователя определенный контакт. Я использую следующий код:

User userLoggedIn = userService.getLoggedInUser(); //user object
User contact = userService.findById(contactId); //contact
if(userLoggedIn.getContacts().contains(contact)) {
    System.out.println("Has this contact.");
}

Это выходное сообщение не отображается. Однако, если я распечатаю список контактов пользователя и их идентификаторы, я ясно вижу, что контакт вставляется в список пользователя.

Я заметил, что если я печатаю hashCode контактного объекта и тот, который находится внутри списка, я получаю другое значение, поэтому я предполагаю, что даже если детали одинаковы, сам объект не является.

Как я могу подойти к этой проблеме, просто проверив, находится ли он в списке. Или мне просто сравнить по идентификатору?

В противном случае указано: как я могу проверить, существует ли объект в списке контактов?

1 ответ

Решение

Вы должны переопределить метод equals в User.

Из JavaDoc:

логическое значение содержит (объект o)

Возвращает true, если этот список содержит указанный элемент. Более формально, возвращает true тогда и только тогда, когда этот список содержит хотя бы один элемент e такой, что (o==null? E ==null: o.equals(e)).

С равными вы должны переопределить и hashCode

http://docs.jboss.org/hibernate/core/4.0/manual/en-US/html/persistent-classes.html

Другие вопросы по тегам