1

次のノードから作成されたグラフがあります。

@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 Data リポジトリには、これらのノード間の最短パスの 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);

2 番目の Iterable は、実際のパスをノードと関係のリストとして返します。これらのそれぞれは、プロパティを持つハッシュ マップとして表されます。このような単純なグラフの場合:

A -- B -- C

とのfindShortestPaths間のメソッドの結果パスには、次の5 つの要素が含まれます。AC

{desc=DescA}, {}, {desc=DescA}, {}, {desc=DescA}

空のマップはノード間の関係を表していると思いますが、この場合、プロパティはありません。id私の問題は、ノードを表すマップにプロパティが含まれていないことです。

質問: ハッシュ マップではなく、対応するエンティティ オブジェクトとしてノードを返すことは可能ですか? そうでない場合、返されたハッシュ マップ内のパス ノードの ID を取得するにはどうすればよいですか?

4

2 に答える 2

3

残念ながら、マップ結果の一部としてノード ID を利用することはできません。これを追跡するためにhttps://jira.spring.io/browse/DATAGRAPH-771を開きました。

于 2015-10-07T17:23:32.713 に答える
1

最終的に、パスノードの横にある変更された Cypher クエリが結果マップ内の別のイテラブルとして抽出された 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")

このソリューションは完璧とは言えませんが、少なくとも必要な詳細が返されます。

于 2015-10-08T12:00:34.537 に答える