【问题标题】:How do I query for paths in spring data neo4j 4?如何在 spring data neo4j 4 中查询路径?
【发布时间】:2024-01-14 15:09:01
【问题描述】:

在 spring data neo4j (3.3.1) 的早期版本中,我能够在我的数据库中查询路径并将它们返回为 Iterable<EntityPath<S,E>>,如下所示:

public interface ArgumentNodeRepository extends GraphRepository<ArgumentNode> {
    @Query("START t=node({0}), r=node({1}) MATCH p=t<-[:SUPPORTED_BY|INTERPRETS*0..]-r RETURN p")
    Iterable<EntityPath<ArgumentNode, ArgumentNode>> getPaths(long childId, long rootId);
}

我正在尝试迁移到 4.0.0,而 EntityPath 类似乎已经消失了。我在migration guide 中没有看到任何提及 EntityPath。我的新返回类型是什么?

【问题讨论】:

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


    【解决方案1】:

    SDN 4 不支持实体路径,但您仍然可以查询路径。 我有一个示例 here,其中包含一个返回路径的 Cypher 查询 - 返回类型为 Iterable&lt;Map&lt;String, Object&gt;&gt;

    这表示路径的集合,每个路径包含交错的节点列表和路径中的关系(节点和关系表示为 Map)。我如何处理路径的一个例子是https://github.com/luanne/flavorwocky/blob/sdn/src/main/java/com/flavorwocky/service/PairingServiceImpl.java#L57

    【讨论】:

    • 对于类似的查询,我曾经返回List&lt;Object&gt;,但是当我只将返回类型更改为Iterable&lt;Map&lt;String, Object&gt;&gt; 时,它返回了更多信息!我可以返回哪些其他类型以获得不同的结果详细信息?请参考文件?
    • 这对我有用。 @luanne 浏览您的 github 项目对于使用 java 处理 neo4j 中的路径非常有帮助。谢谢
    【解决方案2】:

    您也可以为此使用 Neo4jOperations。 只需创建一个自定义存储库实现(参见http://docs.spring.io/spring-data/data-commons/docs/current/reference/html/#repositories.custom-implementations),然后从那里调用 Neo4jOperations bean:

    neo4jOperations.queryForObjects(ArgumentNode.class, "START t=node({0}), r=node({1}) MATCH p=t<-[:SUPPORTED_BY|INTERPRETS*0..]-r RETURN p")
    

    这将返回一个 ArgumentNodes 列表

    【讨论】:

      最近更新 更多