有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从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"
  }
}

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

我知道,如果我创建自己的转换器实现,我可以反序列化父级和子级,并将父级引用设置为子级,但我的实际文档相当大,必须自己编写反序列化代码将是大量的锅炉板代码


共 (1) 个答案

  1. # 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);
        }
    }
    

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