如何使用 Spring Data Neo4j 5 存储库检索路径

How to retrieve a path with Spring Data Neo4j 5 repository

我在 neo4j 中建模了一个简单的有限状态机图,其中域由 State 实体和 FOLLOWED_BY 关系组成(密码:(s1:State)-[r:FOLLOWS]->(s2:State))。 每个都有一些属性。我现在需要分析各州之间的关系,不知道 return 是怎么输入的 存储库界面应该是这样的。

实体和关系的(缩短的)代码 classes(带有 lombok 注释):

@NodeEntity
@NoArgsConstructor
public class State {
  @Getter
  private String name;
  @Getter
  private String       inputVariable;
  @Getter
  private String       outputVariable;
}

@RelationshipEntity(type = "FOLLOWED_BY")
@NoArgsConstructor
public class Transition implements FlowTransition {
  @Getter
  @Property
  private String guard;
  @Getter
  @StartNode
  private State        sourceState;
  @Getter
  @EndNode
  private State        targetState;
}

对于一些分析,从一个状态到后续状态存在哪些路径,其中第一个状态的输出变量用作 以下状态的输入变量,我需要查询中的路径return。因为我正在使用 SDN,所以我想拥有它 return从存储库中输入(自定义)查询。

@Repository
public interface StateRepository extends Neo4jRepository<State, Long> {

  @Query("MATCH p=allShortestpaths((s1:State)-[r:FOLLOWED_BY*1..200]->(s2:State))"
         + " WHERE s1.outputVariable = s2.inputVariable AND id(s1) = {eId}"
         + " RETURN p)"
  ??? findAllByBpelPathRegEx(@Param("eId") String startId);
}

我的问题是:我应该使用什么 class 作为 return 类型来获取路径对象? EntityPathEndResult在SDN5中似乎已经不存在了(也许还有4),那怎么办?也许是预测,但它们看起来应该像什么?

从这个问题和答案 如何在 spring data neo4j 4 中查询路径? :

EntityPath 自 SDN 4 以来不受支持,您应该使用 Iterable<Map<String, Object>> 作为 return 类型(顺便说一句:List<Map<String, Object>> 也可以)。 Map<String, Object> 的键是您在 Cypher 查询中 return 的变量名称(在示例中,它是 RETURN p 中的 p)。

顺便说一句:你 return RETURN nodes(p) AS nodes, relationships(p)(映射键:nodesrelationships(p))可能更好,因为这会 return 你定义的 @NodeEntity@RelationshipEntity 对象,而不仅仅是简单的路径对象(仅包含 id(作为字符串)而不是节点对象本身)

您可以在对象中获取结果 class 或者您需要创建一个 class 具有 @QueryResult 注释的对象来收集 s1 和 s2。