如何让Neo4j OGM连接从复杂查询返回的所有POJO?

时间:2016-03-18 06:55:37

标签: neo4j spring-data-neo4j neo4j-ogm

说我有这样的查询:

START a=node(1), b=node(2) MATCH p=a-[:LINKED_TO*0..]->b 
WITH nodes(p) as pathList UNWIND pathList AS pathNode 
MATCH breakfast=pathNode-[:HAS_A]->(:Bagel) 
RETURN pathList, breakfast

我想要List<Node>对应pathList,我希望该列表中的每个节点都定义了Bagel。我可以从该查询中获得包含所有信息的Iterable<Map<String, Object>>,但POJO具有空字段,理想情况下它们会相互引用。

有没有办法让OGM从这样的查询中吐出完全链接的域对象?

1 个答案:

答案 0 :(得分:2)

是的,如果您使用OGM 2.x并且您能够编写查询以便它返回您想要映射的节点关系。

例如,使用查询的简化版本 -

START a=node(1), b=node(2) 
MATCH p=a-[:LINKED_TO*0..]->b 
RETURN nodes(p) as pathList, rels(p) as rels

pathList将为您提供映射域实体的列表。为您映射的相关实体将是您在rels中返回的实体。

基本上,你返回的是映射的内容。如果您只想映射一个相关实体,请仅返回与其结束节点的关系。

更多示例:https://github.com/neo4j/neo4j-ogm/blob/2.0/core/src/test/java/org/neo4j/ogm/persistence/session/capability/QueryCapabilityTest.java

如果您使用OGM 1.x,则如果您想要ResultIterable<Map<String, Object>>,则不支持实体映射。但是,如果您使用session.queryForObjectsession.query(Class<T> objectType, String cypher, Map<String, ?> parameters)

,它会有效