【问题标题】:Spring-Data-Neo4j annotated Cypher Query, match paramterSpring-Data-Neo4j 注解 Cypher Query,匹配参数
【发布时间】:2015-05-27 18:58:30
【问题描述】:

我正在尝试使用 Spring-Data-Neo4j-3.1.4 对带注释的 Cypher 查询的匹配部分进行参数化,如下所示。第一种方法是有效的。在第二种方法中将节点类型作为参数传递失败。

public interface NodeRepository extends CrudRepository<Node, Long> {

    @Query("START n=node(*) MATCH (n:Organization) RETURN n")
    List<Node> findByNodeType();

    @Query("START n=node(*) MATCH (n:{0}) RETURN n")
    List<Node> findByNodeType(String nodeType);
}

例外是:

org.springframework.dao.InvalidDataAccessResourceUsageException: 
  Error executing statement START n=node(*) MATCH (n:{0}) RETURN n;     
  nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: 
  Error executing statement START n=node(*) MATCH (n:{0}) RETURN n; 
  nested exception is Invalid input '{': 
  expected whitespace or a label name (line 1, column 26)
  "START n=node(*) MATCH (n:{0}) RETURN n"
  at org.springframework.data.neo4j.support.query.CypherQueryEngineImpl.query(CypherQueryEngineImpl.java:61)
  at org.springframework.data.neo4j.repository.query.GraphRepositoryQuery.dispatchQuery(GraphRepositoryQuery.java:107) 
  at org.springframework.data.neo4j.repository.query.GraphRepositoryQuery$1.doWithGraph(GraphRepositoryQuery.java:89) 
  at org.springframework.data.neo4j.support.Neo4jTemplate.doExecute(Neo4jTemplate.java:457) 
  at org.springframework.data.neo4j.support.Neo4jTemplate.access$000(Neo4jTemplate.java:87) 
  at org.springframework.data.neo4j.support.Neo4jTemplate$2.doInTransaction(Neo4jTemplate.java:471)

如何将节点作为参数传递给 Cypher 查询?

【问题讨论】:

  • 还将您的查询更改为:MATCH (n:Organization) RETURN n
  • 你可以试试:MATCH (n) WHERE {0} IN labels(n) RETURN n 但效率不高,你为什么要一开始就这样做??
  • MATCH (n) WHERE {0} IN labels(n) RETURN n 正在工作。您应该将此作为答案发布。

标签: java neo4j spring-data spring-data-neo4j


【解决方案1】:

将您的查询更改为:MATCH (n:Organization) RETURN n

你可以试试:MATCH (n) WHERE {0} IN labels(n) RETURN n

但它不会有效率,你为什么要首先这样做?

由于查询规划器的原因,标签还不允许作为参数。

【讨论】:

    【解决方案2】:

    如果您阅读了异常:Invalid input '{':

    表示查询错误。实际上,您不能在 Cypher 查询中将标签作为参数传递,所以很简单 ;-)

    【讨论】:

      猜你喜欢
      • 2021-03-13
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      相关资源
      最近更新 更多