首页 > 解决方案 > Neo4j OGM 查找节点及其相关节点

问题描述

我有一对多的关系(模型 1-> N 字段),我想找到所有模型及其字段。但模型的字段是空对象。

@NodeEntity
public class Model {
    @Id
    private String id;
    private String name;

    @Relationship(type = "ModelField", direction = Relationship.OUTGOING)
    private List<Field> fields = new ArrayList<Field>();
}

@NodeEntity
public class Field {
    @Id
    private String id;
    private String name;
}

public interface ModelRepo extends Neo4jRepository<Model, String>{
}

public ModelRepo mr;

Iterable<Model> models = mr.findALl();

// the model's fields is empty

标签: javaneo4jspring-data-neo4jneo4j-ogm

解决方案


我刚刚根据您的正确代码重建了您的场景,并且效果很好。我假设通过填充您的数据出了点问题。由于缺少那段代码,我无法指出具体原因。尽管如此,为了帮助您,我概述了检索您的字段节点的步骤。

添加 FieldRepo 存储库:

public interface FieldRepo extends Neo4jRepository<Field, String> {    
}

填充您的场景:

Model model = new Model("modelId1", "Model1");

Field field = new Field("fieldId1", "Field1");
model.getFields().add(field);

Field field2 = new Field("fieldId2", "Field2");
model.getFields().add(field2);

modelRepo.save(model);
fieldRepo.save(field);
fieldRepo.save(field2);

检索您的信息:

Iterable<Model> resultModels = modelRepo.findAll();
for (Model resultModel : resultModels) {
  System.out.println("Model: " + resultModel.getId() + " " + resultModel.getName());
  for (Field resultField : resultModel.getFields()) {
    System.out.println("\tField: " + resultField.getId() + " " + resultField.getName());
  }
}

这导致以下,您的预期输出:

Model: modelId1 Model1
    Field: fieldId1 Field1
    Field: fieldId2 Field2

结果 - 图形表示

我希望这些信息对您有所帮助。请不要犹豫,询问任何不清楚的项目。


推荐阅读