2015-09-24 70 views
1

在我們的項目中,PEPOLEs通過KNOWS關係連接。我們需要深入查詢一個朋友,其中n是用戶輸入的參數。我們使用Spring Data Neo4j來實現它。如何在Cypher語句中使用參數進行可變長度模式匹配?

public interface PeopleRepository extends GraphRepository<People> 
{ 
    @Query("MATCH (startnode{name:{name}})-[:KNOWS*1..{depth}]-(remote_friend) RETURN remote_friend.name"); 

    List<People> getFriendsInDepth(@Param("name") String name, @Param("depth") Integer depth); 
} 

上述代碼將不起作用。但是,如果我使用固定的Integer值替換{depth}參數,如下所示:

@Query("MATCH (startnode{name:{name}})-[:KNOWS*1..2]-(remote_friend) RETURN remote_friend.name"); 

List<People> getFriendsInDepth(@Param("name") String name, @Param("depth") Integer depth); 

它的工作原理。我知道問題是由深度參數引起的。但是我嘗試了很多方法來替換{depth},例如:toInt({depth}),它仍然不起作用。有沒有人知道如何使用Cypher語句中的參數進行可變長度模式匹配?

回答

1

Cypher不允許參數化關係的深度,因此@Query也不會支持它。

如果您使用Spring Data Neo4j 4,那麼也許您可以將您的@Query翻譯成一組org.neo4j.ogm.cypher.Filter

然後,您可以使用接受Filters以及深度的Session.loadAll方法。 MusicIntegrationTest包含幾個過濾器示例。

相關問題