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

在spring-data-neo4j版本4.1.0上未正确获取关系,neo4j,spring-data-neo4j-4,neo4j-ogm,Neo4j,Spring Data Neo4j 4,Neo4j Ogm,我一直在尝试用neo4j实体表示一个有向图。在spring-data-neo4j 4.1.0.BUILD-SNAPSHOT上工作 在我的场景中,有一个节点表示一个通用图节点,还有一个NodeWithScore,它继承自该节点并包含一些附加数据。图中的所有节点都只连接到一个NodeWithScore 我使用了以下映射: @NodeEntity @Setter @Getter @NoArgsConstructor public class Node { @GraphId priva

我一直在尝试用neo4j实体表示一个有向图。在spring-data-neo4j 4.1.0.BUILD-SNAPSHOT上工作

在我的场景中,有一个节点表示一个通用图节点,还有一个NodeWithScore,它继承自该节点并包含一些附加数据。图中的所有节点都只连接到一个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()));
    }

}
调用以下代码时:

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的分数关系进行连接

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

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

你能试着在@Relationship注释上明确设置方向吗?你能试着在你的类中去掉NodeWithScore属性,看看是否发生了同样的问题。可能是因为同一个类,它被映射到了错误的领域?你能不能也检查一下你的图表,看看它是什么样子的。明确地设置方向是没有帮助的。是的,对此很抱歉,我忘了在我的帖子中提到它-当我从Node中删除nodeWithScore时,一切都很好。实际上-如果没有调用setNodeWithScore()方法,它仍然可以正常工作。session.save()之后创建的图形等于:create(A:Node),(B:Node),(C:Node:NodeWithScore),(A)-[:CHILD]->(B),(B)-[:SCORE]->(C),(B)-[:SCORE]->(C),[:SCORE]->(C)我的猜测是NodeWithScore也是一个节点,映射太模糊了。将不得不花一些时间调试这一个
A -> [B, C]
B -> [C]
C -> [B]