【问题标题】:How to retrieve a path with Spring Data Neo4j 5 repository如何使用 Spring Data Neo4j 5 存储库检索路径
【发布时间】:2018-12-30 08:51:03
【问题描述】:

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

实体和关系类的(缩短的)代码(带有 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;
}

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

@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);
}

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

【问题讨论】:

    标签: spring neo4j spring-data-neo4j


    【解决方案1】:

    来自这个问答How do I query for paths in spring data neo4j 4?

    EntityPath 自 SDN 4 起不支持,您应该使用 Iterable&lt;Map&lt;String, Object&gt;&gt; 作为返回类型(顺便说一句:List&lt;Map&lt;String, Object&gt;&gt; 也可以)。 Map&lt;String, Object&gt; 的键是您在 Cypher 查询中返回的变量的名称(在示例中是来自 RETURN pp)。

    顺便说一句:最好返回 RETURN nodes(p) AS nodes, relationships(p) (map-keys: nodes, relationships(p)) 因为这将返回您定义的 @NodeEntity@RelationshipEntity 对象,而不仅仅是简单的路径对象(其中包含只是 ids(作为字符串)而不是节点对象本身)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-18
        • 2012-09-17
        • 2020-04-12
        • 2015-08-04
        • 1970-01-01
        相关资源
        最近更新 更多