检查@DBRef List <user>中是否存在User对象

时间:2015-04-25 16:54:19

标签: spring mongodb spring-data mongo-java dbref

我正在使用MongoDB,Spring Data和Spring MVC。 我有一个用户模型,其中包含联系人列表:

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,我清楚地看到联系人已插入用户列表中。

我注意到如果我打印了联系对象的hashCode和列表中的hashCode,我会得到一个不同的值,所以我假设即使细节是相同的,对象本身也不是。 / p>

如何通过检查他是否在列表中来解决此问题。或者我应该只通过id进行比较?

另有说​​明:如何检查联系人列表中是否存在对象?

1 个答案:

答案 0 :(得分:1)

您应该覆盖User中的equals方法。

来自http://cloudmonix.com/blog/top-sql-azure-metrics-to-monitor/

  

boolean contains(Object o)

     

如果此列表包含指定的元素,则返回true。更多   正式地,当且仅当此列表包含至少一个时才返回true   元素e使得(o == null?e == null:o.equals(e))。

使用equals,您必须覆盖和hashCode

JavaDoc