NodeEntity无法转换为graphdb.Node

时间:2018-01-29 20:14:05

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

我有一个像以下一样的NodeEntity,我想在它上面使用Pathfinder算法。算法如下。不幸的是我得到的错误是neo4j.entity.Stop无法强制转换为org.neo4j.graphdb.Node

我该怎么办?我不知道如何让春天使用org.neo.graphalgo graphalgo库

private Path testGraphAlgoFactory(Stop s1, Stop s2){

 PathExpander expander = PathExpanders.allTypesAndDirections();

 PathFinder<Path> pathFinder =
                GraphAlgoFactory.shortestPath(expander , 6);

 Path path = pathFinder.findSinglePath((Node)s1, (Node)s2);
}

这是我的NodeEntity类,如下所示:

@NodeEntity
public class Stop {
    @GraphId
    private Long id;

    @Property(name="name")
    private String name;

    @Property(name="lon")
    private double longitude;

    @Property(name="lat")
    private double latitude;

    @Property(name="id")
    private String stopId;
}

1 个答案:

答案 0 :(得分:2)

如果您使用OGM将图表中的节点转换为对象,则这是一个有效的结果。 像Stop这样的类是&#34;只是&#34; Java类,并不知道他们有任何Neo4j来源。

除此之外(还有关于今天早些时候的其他问题):图算法旨在用作Neo4j中的插件,而不是作为应用程序代码的一部分。 Neo4j Graph Algorithms documentation

因此,在您的应用程序中使用SessionFactory并获取新的Session以运行在Neo4j上调用算法的cypher语句可能会更容易。例如CALL algo.shortestPath(...)

另一种选择可能是您在SpringData Neo4j存储库中使用自定义查询来使用@Query("CALL ...")来执行查询语句。但是你必须知道你将从cypher声明中返回什么。然后,您可以将结果放入@QueryResult类。 Sample from the docs(但不要创建内部类,而是在实体扫描路径中创建一个类)