在我的Java代码中,我有一个查询来匹配从树到树中叶子的最短路径。
Strinq query = "Match path = (p:Root)-[*1..100]-(m:Leaf) "
+ "WITH p,m,path ORDER BY length(path) LIMIT 1 RETURN path";
但是,当我尝试按如下方式查询时
SessionFactory sessionFactory = new SessionFactory("incyan.Data.Neo4j.Models");
Session session = sessionFactory.openSession("http://localhost:7474");
Object o = session(query, new HashMap<String,Object>());
o
包含ArrayList
LinkedHashMap
个而非映射对象。
我甚至无法确定路径元素的标签以及关系的起点和终点节点。
我做错了什么?
答案 0 :(得分:1)
当前的neo4j-ogm版本不会将查询结果映射到域实体。返回路径只会为您提供该路径中节点和关系的属性(按顺序,您可以推断出关系的开始/结束)。目前OGM用于此特定操作的Neo4j REST api不返回ID,这就是它们丢失的原因。您可能需要提取ID并将其作为查询的一部分返回。
将Neo4j-OGM 2.0版本中的各个查询结果列映射到实体。
答案 1 :(得分:0)
我不确定Java位,但是如果你使用shortestPath
函数(关键字?),你的查询应该更有效:
MATCH path=shortestPath((p:Root)-[*1..100]-(m:Leaf))
RETURN path
另外,我不知道你的数据模型是什么样的,但是我希望树的节点上的标签(我假设它是一棵树)都是一样的。您可以使用Cypher判断节点是根还是叶子:
MATCH path=shortestPath((root:Element)-[*1..100]-(leaf:Element))
WHERE NOT((root)-[:HAS_PARENT]->()) AND NOT(()-[:HAS_PARENT]->(leaf))
RETURN path