在spring cypher query中使用set子句

时间:2014-01-15 12:38:02

标签: neo4j spring-data-neo4j

请给我一些使用java在cypher查询中使用set子句的示例。

我只想更新关系对象的属性,但它总是失败。 如果我正在运行像

这样的查询
    ExecutionResult executionResult = engine.execute("start n=node:Person(name=\"suresh\"),n2=node:Email(subject=\"Hi\") match (n)-[r]-(n2) return r ");
    System.out.println(executionResult);

我得到了如下的正确答案

+-----------------------------------------------------------------------------------------------------------------------------+
| r                                                                                                                           |
+-----------------------------------------------------------------------------------------------------------------------------+
| :DynamicRelationshipType[Have][69] {accessed->true,__type__->"org.test.spring.neo.domain.EmailRelationShip",relation->"To"} |
+-----------------------------------------------------------------------------------------------------------------------------+
1 rows, 260 ms

但是当我尝试运行像

这样的查询时
start n=node:Person(name=\"suresh\"),n2=node:Email(subject=\"Hi\") match (n)-[r]-(n2) CREATE SET r.accessed=true return r 

总是失败 堆栈跟踪

expected return clause
    "start n=node:Person(name="suresh"),n2=node:Email(subject="Hi") match (n)-[r]-(n2) CREATE SET r.accessed=true return r "
                                                                                       ^
        at org.neo4j.cypher.internal.parser.v1_6.CypherParserImpl.parse(CypherParserImpl.scala:65)
        at org.neo4j.cypher.CypherParser.parse(CypherParser.scala:42)
        at org.neo4j.cypher.ExecutionEngine$$anonfun$prepare$1.apply(ExecutionEngine.scala:60)
        at org.neo4j.cypher.ExecutionEngine$$anonfun$prepare$1.apply(ExecutionEngine.scala:60)
        at org.neo4j.cypher.internal.LRUCache.getOrElseUpdate(LRUCache.scala:31)
        at org.neo4j.cypher.ExecutionEngine.prepare(ExecutionEngine.scala:60)
        at org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:54)
        at org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:51)
        at org.neo4j.cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:63)
        at org.test.spring.neo.controller.MediatorController.main(MediatorController.java:34)

我试图像下面那样执行但是这个也失败了

ExecutionResult executionResult = engine.execute("start n=node:Person(name=\"suresh\"),n2=node:Email(subject=\"Hi\") match (n)-[r]-(n2) SET r.accessed=false return r ");

我指的是http://docs.neo4j.org/refcard/1.9/来创建一个读写查询

我正在使用sdn版本1.8。

请帮助

1 个答案:

答案 0 :(得分:0)

如错误消息所示:“预期退货条款”

Neo4j 1.8比例如2.0

e.g。像这样的东西:

start n=node:Person(name="abc"), n2=node:Email(subject="Hi") 
match (n)-[r]-(n2) 
set r.accessed=true
return count(*)

您还应始终使用参数:

start n=node:Person(name={person}), n2=node:Email(subject={subject}) 
match (n)-[r]-(n2) 
set r.accessed=true
return count(*)