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

时间:2016-04-18 12:28:12

标签: neo4j neo4j-ogm

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

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

我编写了所有的域类(PARAMETER,TASK和STEP)。

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

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

编辑: 为了更加清晰,我已经完成了这个课程任务

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

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

我希望填充一个Task实例(包含步骤和参数),并且每个步骤也都要填充。

2 个答案:

答案 0 :(得分:2)

您可以使用session.query()返回包含结果的org.neo4j.ogm.model.Result。仅在Neo4j OGM 2.0.1中支持此功能。

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

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

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

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

如果您需要了解可以映射的内容,那么Christophe引用的博客帖子对于OGM功能仍然有效。

答案 1 :(得分:1)

是的,你可以,有一篇关于它的完整博客文章:

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