如何将查询结果映射到域对象?

How can I map a query result to domain objects?

我正在开发一个直接使用 neo4j-ogm 库的程序(也就是我不使用任何 Spring 组件)和我的 Neo4J 数据库有这种关系:

PARAMETER<-[:HAS_PARAMETER]-TASK-[:HAS_STEP]->STEP-[:HAS_PARAMETER]->PARAMETER STEP-[:HAS_STEP]->STEP PARAMETER-[:INITIALIZES]->PARAMETER

我对我的所有域 classes(参数、任务和步骤)进行了编码。

我写了一个查询(使用 session.query 方法调用): MATCH (:TASK)-[r*]->() return r

我可以直接将查询结果映射到域对象吗?

编辑: 为了更清晰,我有这个 class 任务

@NodeEntity
    class Task {
        @RelationShip(type = "HAS_STEP")
        Set<Step> steps;

        @RelationShip(type = "HAS_PARAMETER")  
        Set<Parameter> parameters;
    }

我希望填充一个任务实例(带有步骤和参数)并且每个步骤也被填充。

是的,有一个完整的博客post:

http://graphaware.com/neo4j/2016/04/06/mapping-query-entities-sdn.html

您可以使用 session.query() 到 return 包含结果的 org.neo4j.ogm.model.Result。这仅在 Neo4j OGM 2.0.1 中受支持。

不支持返回路径,因此您必须return构成路径的节点和关系,例如

MATCH p=(t:TASK)-[r*]->() return t, nodes(p), rels(p)

然后,您可以从 Result 访问 t,这将是一个水合任务。或者,您可以从 Result 访问路径中所有水合实体的节点。

更多示例在此处进行测试:https://github.com/neo4j/neo4j-ogm/blob/2.0/core/src/test/java/org/neo4j/ogm/persistence/session/capability/QueryCapabilityTest.java

顺便说一下,如果您需要了解可以映射的内容,Christophe 引用的博客 post 仍然对 OGM 功能有效。