在Mongo中使用双向引用时的Spring应用程序设计

时间:2015-11-11 09:39:25

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

我有两个类Person和Tasks。它是一对多的关系:一个人有一个任务列表,一个任务属于一个人。

我的申请有两种观点。在其中一个中,我需要向每个人显示人员和任务。在另一个我需要显示任务和与之关联的人。

我的第一个想法是在Mongo中使用two-way referencing。所以一个Person会有一个Tasks Ids列表,一个Task会有一个Person Id。

像这样:

    BasicClientCookie cookie = new BasicClientCookie("XXT", "5a5b98563c4aabd675b81e4ba0fdf6cf");
    cookie.setExpiryDate(new Date("Fri Dec 11 15:24:17 GMT+06:00 2015"));
    cookie.setDomain("10.0.2.2");
    cookie.setPath("/");
    cookie.setVersion(1);
    cookie.setComment("");
    cookie.setValue("5a5b98563c4aabd675b81e4ba0fdf6cf");
    cookieStore.addCookie(cookie);

{
_id: ObjectID("AAF1"),
name: "Person Name",
tasks [
      ObjectID("ADF9"), 
      ObjectID("AE02"),
      ObjectID("AE73") 
    ]
}

但我无法弄清楚如何设计我的Spring应用程序来查找所有人员并构建一个单独的json,其中嵌入了一个任务列表以发送到UI。我使用MongoOperations这样找到我使用的所有人 { _id: ObjectID("ADF9"), description: "Task One", owner: ObjectID("AAF1") } 。由于我没有嵌入Persons中的Tasks文档,因此这些对象只有Tasks Ids列表。获取任务时同样有效:我想将Person添加到我将发送给UI的JSON。

我尝试使用findAll(Person.class)并将任务列表添加到Person和Person to Tasks,但这以stackoverflow结束,因为每个Tasks都有一个Person,Person有任务,每个Tasks都有一个Person,所以上。

1 个答案:

答案 0 :(得分:1)

我刚刚使用@JsonManagedReference和@JsonBackReference解决了我的问题。

class Person {
  @DBRef
  @JsonManagedReference
  private List<Tasks> tasks;
}

class Tasks {
  @DBRef
  @JsonBackReference
  private Person person;
}