从Spring Data MongoDB中的嵌入式文档中获取对父文档的引用

时间:2014-02-18 13:11:51

标签: java spring spring-data-mongodb

我想从嵌入对象访问父对象,但无法找到方法。我将在这里展示一个这意味着什么的例子:

我有两个类似的Java类:

@Document    
public class Parent {
  private String name;
  private List<Child> children;

  @PersistenceConstructor
  public Parent (String name, List<Child> children) {
    this.name = name;
    this.children = children;
  }

...

@Document
public class Child {
  private String name;
  private Parent parent;

  @PersistenceConstructor
  public Child(String name, Parent parent) {
    this.name = name;
    this.parent = parent;
  }
  ...

我在MongoDB中的文档是这样的:

{
  "name": "some name",
  "children" : {
    "name": "name1"
  },
  {
    "name" : "name2"
  }
}

是否有可能获得对父级的引用,例如在Child类的构造函数中?似乎Child类中@PersistenceConstructor注释构造函数中的所有参数都必须来自children数组,这意味着名为parent的参数为null:(

我知道如果我创建自己的Converter实现,我可以反序列化Parent和Child并将父引用设置为child自己,但是我的实际文档非常大并且必须自己编写反序列化代码是很多锅炉代码。

1 个答案:

答案 0 :(得分:1)

您可以做的是手动设置父参考:

儿童中的

@Transient
private Parent parent;

public void setParent(Parent parent) {
    this.parent = parent;
}

@Transient注释告诉spring数据在保存对象时忽略该字段。

然后在父母:

@PersistenceConstructor
public Parent (String name, List<Child> children) {
    this.name = name;
    this.children = children;
    for (Child child : children) {
        child.setParent(this);
    }
}

并且使用一些聪明的接口和辅助类或继承,重复代码的数量将是最小的。