Как я могу сопоставить результат запроса с объектами домена?

Я разрабатываю программу, которая напрямую использует библиотеку neo4j-ogm (иначе я не использую какой-либо компонент Spring), и моя БД Neo4J имеет такие отношения:

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

Я закодировал все свои доменные классы (ПАРАМЕТР, ЗАДАЧА и ШАГ).

Я пишу запрос типа (с вызовом метода session.query): MATCH (:TASK)-[r*]->() return r

Могу ли я напрямую сопоставить результат моего запроса с объектами домена?

РЕДАКТИРОВАТЬ: Чтобы быть острее, у меня есть задача этого класса

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

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

Я хочу заполнить экземпляр задачи (с шагами и параметрами), и каждый шаг тоже будет заполнен.


person ChriX    schedule 18.04.2016    source источник


Ответы (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

Кстати, запись в блоге, на которую ссылается Кристоф, по-прежнему действительна для функциональности OGM, если вам нужно понять, что можно сопоставить.

person Luanne    schedule 18.04.2016
comment
Это работает для получения объекта :) Но как я могу смешать объект и вычисленное значение в своем запросе? Я прочитал документ Кристофа, но аннотации @Query и QueryResult, похоже, не реализованы в neo4j-ogm. - person ChriX; 18.04.2016
comment
Просто верните объекты и вычисленные значения — ваш результат будет содержать значения для каждого из них. Сущности будут сопоставлены с объектами домена, а вычисленные значения будут доступны как есть. См. github.com/neo4j/neo4j-ogm/blob/2.0/core/src/test/java/org/ - person Luanne; 18.04.2016

Да, можете, об этом есть полный пост в блоге:

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

person Christophe Willemsen    schedule 18.04.2016
comment
Кажется, это специфично для среды Spring Data :( Есть ли решение с библиотекой neo4j-ogm? - person ChriX; 18.04.2016
comment
Я думаю, что неправильно понял часть предложения SDN и Neo4J-OGM. Это должно означать, что решение работает либо с SDN, либо с Neo4J-OGM. - person ChriX; 18.04.2016