Проверьте, существует ли объект 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