【问题标题】:How can I map a query result to domain objects?如何将查询结果映射到域对象?
【发布时间】:2016-04-18 12:28:12
【问题描述】:

我正在开发一个直接使用 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*]-&gt;() return r

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

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

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

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

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

【问题讨论】:

    标签: neo4j neo4j-ogm


    【解决方案1】:

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

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

    MATCH p=(t:TASK)-[r*]-&gt;() 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 引用的博客文章对于 OGM 功能仍然有效。

    【讨论】:

    • 它适用于获取对象 :) 但是,如何在查询中混合对象和计算值?我阅读了 Christophe 的文档,但注解 @Query 和 QueryResult 似乎没有在 neo4j-ogm 中实现。
    • 只返回对象和计算值 - 您的 Result 将包含每个值。实体将映射到域对象,计算值将按原样可用。见github.com/neo4j/neo4j-ogm/blob/2.0/core/src/test/java/org/…
    【解决方案2】:

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

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

    【讨论】:

    • 它似乎特定于 Spring Data 框架 :(neo4j-ogm 库有解决方案吗?
    • 我想我误解了句子部分“SDN and Neo4J-OGM”。这应该意味着该解决方案适用于 SDN 或 Neo4J-OGM。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 2020-12-08
    • 2020-08-17
    相关资源
    最近更新 更多