2013-05-07 276 views
1

我已經在Neo4j網絡界面中測試了我的查詢,現在我想將它添加到我的Java程序中。spring-data-neo4j不會將參數代入@Query

@Query("START n=({self}) MATCH (n)-->(x)<--(y) RETURN y") 
private Iterable<Track> alternativeTracks; 

而且也這樣(在GraphRepository擴展接口):我曾經嘗試這樣做(在名爲跟蹤一個@NodeEntity類)

@Query("START n={track} MATCH (n)-->(x)<--(y) RETURN y") 
public Iterable<Track> findAlternativeTracks(@Param("track") Track track); 

和位置版本太多:

​​

但每次我得到這個異常和痕跡:

Exception in thread "main" org.neo4j.rest.graphdb.RestResultException: expected either node or relationship here 
"START n=({self}) MATCH (n)-->(x)<--(y) RETURN y" 
     ^at 
SyntaxException 
    org.neo4j.cypher.internal.parser.v1_8.CypherParserImpl.parse(CypherParserImpl.scala:45) 
    org.neo4j.cypher.CypherParser.parse(CypherParser.scala:42) 
    org.neo4j.cypher.ExecutionEngine$$anonfun$prepare$1.apply(ExecutionEngine.scala:67) 
    org.neo4j.cypher.ExecutionEngine$$anonfun$prepare$1.apply(ExecutionEngine.scala:67) 
    org.neo4j.cypher.internal.LRUCache.getOrElseUpdate(LRUCache.scala:37) 
    org.neo4j.cypher.ExecutionEngine.prepare(ExecutionEngine.scala:67) 
    org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:59) 
    org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:63) 
    org.neo4j.cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:79) 
    org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:67) 
    java.lang.reflect.Method.invoke(Method.java:597) 

根據我正在嘗試的版本,將「自我」替換爲「曲目」或「0」。

我一直在遍歷文檔和示例,但我似乎無法弄清楚我在這裏錯過了什麼。任何人都可以啓發我嗎?

(我在彈簧數據Neo4j的版本2.2.1.RELEASE)

回答

2

當使用節點對象作爲參數,你需要用它在一個節點()。即。節點({self})而不僅僅是({self})。

固定這樣的:

@Query("START n=node({self}) MATCH (n)-->(x)<--(y) RETURN y") 
private Iterable<Track> alternativeTracks;