neo4jエンティティを使用して有向グラフを表現しようとしています。spring-data-neo4j 4.1.0.BUILD-SNAPSHOT の作業
私のシナリオでは、一般的なグラフ ノードを表す Node と、Node を継承し、いくつかの追加データを含む NodeWithScore があります。グラフ内のすべてのノードは、正確に 1 つの NodeWithScore に接続されています。
次のマッピングを使用しました。
@NodeEntity
@Setter
@Getter
@NoArgsConstructor
public class Node {
@GraphId
private Long id;
private String name;
@Relationship(type = "SCORE")
private NodeWithScore nodeWithScore;
@Relationship(type = "CHILD")
private Set<Node> children;
@Override
public String toString() {
return String.format("%s -> %s", name,
children == null ? "[]" : children.stream().map(Node::getName).collect(toList()));
}
}
と
@NodeEntity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class NodeWithScore extends Node {
protected Double score;
}
次のコードを呼び出す場合:
Node a = new Node();
a.setName("A");
Node b = new Node();
b.setName("B");
NodeWithScore c = new NodeWithScore();
c.setName("C");
a.setChildren(ImmutableSet.of(b));
b.setChildren(ImmutableSet.of(c));
a.setNodeWithScore(c);
b.setNodeWithScore(c);
c.setNodeWithScore(c);
session.save(a);
すべてが期待どおりに機能します。ノード A には 1 つの子 B があり、その子 B には 1 つの子 C があり、3 つすべてが SCORE 関係を介してノード C に接続されています。
そして明らかに、次の行で私が呼び出す場合:
ImmutableSet.of(a, b, c).forEach(System.out::println);
結果は次のようになります。
A -> [B]
B -> [C]
C -> []
ただし、次の行で次のように呼び出そうとすると:
session.loadAll(Node.class).forEach(System.out::println);
私は次の結果を得ています:
A -> [B, C]
B -> [C]
C -> [B]
それがneo4jのバグなのか、それとも何か間違っているのか教えてください。