2015-04-25 1 views
1

Я использую MongoDB, Spring Data и Spring MVC. У меня есть модель пользователя, которая имеет список контактов:Проверьте, существует ли объект пользователя в списке @DBRef <User>

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

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

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

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

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

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

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

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

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

+1

Я думаю, что вы ответили себе на ваш вопрос, вам нужно сравнить с помощью Id. – faljbour

ответ

1

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

От JavaDoc:

булево содержит (Object о)

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

С равно вы должны переопределить и хэш-код

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

Смежные вопросы