我在neo4j中建模了一个简单的有限状态机图,其中的域由State
个实体和一个FOLLOWED_BY
关系组成(在密码中为(s1:State)-[r:FOLLOWS]->(s2:State)
)。
每个都有一些属性。我现在需要分析状态之间的关系,并且不知道返回类型如何
存储库界面应如下所示。
实体和关系类的代码(缩短的代码)(带有龙目注释):
@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);
}
我的问题是:我应该使用哪个类作为获取路径对象的返回类型? EntityPath
或EndResult
在SDN5中似乎不再存在(也许还有4个),那该怎么办?也许是投影,但它们应该看起来像吗?
答案 0 :(得分:0)
根据这个问题和答案How do I query for paths in spring data neo4j 4? :
从SDN 4开始不支持 EntityPath
,并且您应该使用Iterable<Map<String, Object>>
作为返回类型(btw:List<Map<String, Object>>
都可以)。 Map<String, Object>
的键是您在Cypher查询中返回的变量的名称(在示例中,它是p
中的RETURN p
)。
顺便说一句:最好返回RETURN nodes(p) AS nodes, relationships(p)
(映射键:nodes
,relationships(p)
),因为这样会返回定义的@NodeEntity
和@RelationshipEntity
对象不仅是简单的路径对象(仅包含id(作为字符串),还没有节点对象本身)
答案 1 :(得分:0)
You can take the result in an object class or you need to create a class having @QueryResult annotation collect the s1 and s2.