【问题标题】:Check if User object exists in @DBRef List<User>检查 @DBRef List<User> 中是否存在 User 对象
【发布时间】:2015-07-04 06:31:44
【问题描述】:

我正在使用 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 和列表中的那个,我会得到不同的值,所以我假设即使细节相同,对象本身也不是。

我如何通过简单地检查他是否在列表中来解决这个问题。还是我应该只按 id 比较?

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

【问题讨论】:

  • 我想你自己回答了你的问题,你需要按 ID 比较。

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


【解决方案1】:

你应该重写 User 中的 equals 方法。

来自JavaDoc

布尔包含(对象o)

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

使用 equals 你必须覆盖和 hashCode

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

【讨论】:

    猜你喜欢
    • 2016-10-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 2013-09-26
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多