如何在 Spring Data Neo4j 4.0.0 中通过路径查询获取节点 ID?
How to get node ids with path query in Spring Data Neo4j 4.0.0?
我有一个从以下节点构建的图表:
@NodeEntity
public class Node {
@GraphId
private Long id;
private String desc;
@Relationship(type = "CONNECTED_WITH", direction = Relationship.UNDIRECTED)
private Set<Node> nodes;
//getters and setters
}
我的 Spring 数据存储库包含一个 Cypher 查询这些节点之间的最短路径:
@Query("START startNode = node({startId}), endNode = node({endId}) " +
"MATCH paths = allShortestPaths((startNode)-[*]-(endNode)) " +
"RETURN paths")
Iterable<Map<String, Iterable<Object>>> findShortestPaths(@Param("startId") long startId, @Param("endId") long endId);
Second Iterable returns 作为节点和关系列表的实际路径,其中每个节点和关系都表示为具有属性的哈希映射。对于像这样的简单图表:
A -- B -- C
findShortestPaths
方法在 A
和 C
之间的结果路径包含 5 个元素:
{desc=DescA}, {}, {desc=DescA}, {}, {desc=DescA}
我猜想空映射表示节点之间的关系,在这种情况下它们没有任何 属性。我的问题是代表节点的地图不包含 id
属性.
问题:
是否可以 return 节点作为对应的实体对象而不是哈希映射?如果没有,我如何在 returned 散列映射中获取路径节点的 ID?
遗憾的是,节点 ID 不能作为地图结果的一部分提供。已打开 https://jira.spring.io/browse/DATAGRAPH-771 以跟踪此内容。
最终我得到了一个经过修改的 Cypher 查询,它在路径节点旁边 returns 还将 id 作为结果映射中的单独迭代器提取出来。
@Query("START startNode = node({startId}), endNode = node({endId}) " +
"MATCH paths = allShortestPaths((startNode)-[*]-(endNode)) " +
"RETURN nodes(path) AS nodes, EXTRACT(node IN nodes(path) | ID(node)) AS ids")
虽然这个解决方案远非完美,但至少它returns需要细节。
我有一个从以下节点构建的图表:
@NodeEntity
public class Node {
@GraphId
private Long id;
private String desc;
@Relationship(type = "CONNECTED_WITH", direction = Relationship.UNDIRECTED)
private Set<Node> nodes;
//getters and setters
}
我的 Spring 数据存储库包含一个 Cypher 查询这些节点之间的最短路径:
@Query("START startNode = node({startId}), endNode = node({endId}) " +
"MATCH paths = allShortestPaths((startNode)-[*]-(endNode)) " +
"RETURN paths")
Iterable<Map<String, Iterable<Object>>> findShortestPaths(@Param("startId") long startId, @Param("endId") long endId);
Second Iterable returns 作为节点和关系列表的实际路径,其中每个节点和关系都表示为具有属性的哈希映射。对于像这样的简单图表:
A -- B -- C
findShortestPaths
方法在 A
和 C
之间的结果路径包含 5 个元素:
{desc=DescA}, {}, {desc=DescA}, {}, {desc=DescA}
我猜想空映射表示节点之间的关系,在这种情况下它们没有任何 属性。我的问题是代表节点的地图不包含 id
属性.
问题: 是否可以 return 节点作为对应的实体对象而不是哈希映射?如果没有,我如何在 returned 散列映射中获取路径节点的 ID?
遗憾的是,节点 ID 不能作为地图结果的一部分提供。已打开 https://jira.spring.io/browse/DATAGRAPH-771 以跟踪此内容。
最终我得到了一个经过修改的 Cypher 查询,它在路径节点旁边 returns 还将 id 作为结果映射中的单独迭代器提取出来。
@Query("START startNode = node({startId}), endNode = node({endId}) " +
"MATCH paths = allShortestPaths((startNode)-[*]-(endNode)) " +
"RETURN nodes(path) AS nodes, EXTRACT(node IN nodes(path) | ID(node)) AS ids")
虽然这个解决方案远非完美,但至少它returns需要细节。