如何使用neo4j-ogm

问题描述

为了熟悉neo4j-ogm,我创建了一个非常简单的示例,包含3个人, 在这里,人员A认识人员B,后者又认识人员C并可以在数据库浏览器中进行验证。

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

我正在使用以下代码加载人员A。但是人员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仅返回相关人员,而不是任何相关人员。 您甚至都没有对类型KNOWS的关系进行建模(只是在这里引用问题中的措辞)。

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

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

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