0

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のバグなのか、それとも何か間違っているのか教えてください。

4

0 に答える 0