在spring-data-neo4j版本4.1.0上没有正确获取关系

时间:2016-03-27 00:44:21

标签: neo4j spring-data-neo4j-4 neo4j-ogm

我一直试图使用neo4j实体来表示有向图。使用spring-data-neo4j 4.1.0.BUILD-SNAPSHOT

在我的场景中,有一个Node代表一个通用图节点,NodeWithScore继承自Node并包含一些额外的数据。图中的所有节点都只连接到一个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有一个子B,而子B又有一个子C,并且所有三个都通过与节点C的SCORE关系连接。

显然,如果在下一行我打电话:

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的错误,还是我做错了。

0 个答案:

没有答案