如何使用 neo4j-ogm 加载引用对象的下一个深度级别

How to load the next depth level of referenced objects with neo4j-ogm

为了熟悉 neo4j-ogm,我创建了一个非常简单的 3 人示例, 其中 A 认识 B,B 认识 C,并且可以在数据库浏览器中验证这一点。

现在我想加载深度级别为 1 的人员 A(因此 knows 字段已经填充了人员 B)并且在访问更深的嵌套字段时(例如通过遍历 GUI 中的数据)应该加载引用的对象。在这种情况下,检查B的字段'knows'时,应该加载C的

我正在使用以下代码加载人员 A。但是根本没有引用 Person B,而且我还没有找到任何关于如何加载下一级数据的信息。至少它不能仅通过访问它们来工作(就像在休眠中一样)。

Result result = session.query("Match (p:Person {name: \"Person A\"}) return p", Collections.EMPTY_MAP);


@NodeEntity
public class Person {
    @Id @GeneratedValue
    private Long id;

    public String name;
    public Person knows;

    public Person() {
    }
    
    public Person(String name) {
        this.name = name;
    }
}

您的查询 Match (p:Person {name: \"Person A\"}) return p 只是 return 相关人员,而不是任何相关人员。 您甚至没有对类型 KNOWS 的关系建模(这里只是指您问题中的措辞)。

此人应该有一个附加字段:

@Relationship("KNOWS")
private List<Person> knownPeople;

并且您的查询应该类似于 Match (p:Person {name: \"Person A\"})-[r:KNOWS]-(op:Person) return p, collect(r), collect(op) 以获取第一级关系。 您当然可以在查询中添加更多模式和 return 部分,以获得下一个级别等。 但最终可能更容易使用 session.loadAll(Person.class) 和会话的兄弟方法 API 为您生成 Cypher 查询。