Spring-Data-Neo4j注解Cypher Query,匹配参数
Spring-Data-Neo4j annotated Cypher Query, match paramter
我正在尝试使用 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.doWithGraph(GraphRepositoryQuery.java:89)
at org.springframework.data.neo4j.support.Neo4jTemplate.doExecute(Neo4jTemplate.java:457)
at org.springframework.data.neo4j.support.Neo4jTemplate.access[=12=]0(Neo4jTemplate.java:87)
at org.springframework.data.neo4j.support.Neo4jTemplate.doInTransaction(Neo4jTemplate.java:471)
如何将节点作为参数传递给 Cypher 查询?
如果您阅读异常:Invalid input '{':
表示查询错误。事实上,您不能在 Cypher 查询中将标签作为参数传递,这很简单 ;-)
将您的查询更改为:MATCH (n:Organization) RETURN n
你可以试试:MATCH (n) WHERE {0} IN labels(n) RETURN n
但这不会有效率,你为什么要首先这样做?
出于查询规划器的原因,标签不允许作为参数(目前)。
我正在尝试使用 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.doWithGraph(GraphRepositoryQuery.java:89)
at org.springframework.data.neo4j.support.Neo4jTemplate.doExecute(Neo4jTemplate.java:457)
at org.springframework.data.neo4j.support.Neo4jTemplate.access[=12=]0(Neo4jTemplate.java:87)
at org.springframework.data.neo4j.support.Neo4jTemplate.doInTransaction(Neo4jTemplate.java:471)
如何将节点作为参数传递给 Cypher 查询?
如果您阅读异常:Invalid input '{':
表示查询错误。事实上,您不能在 Cypher 查询中将标签作为参数传递,这很简单 ;-)
将您的查询更改为:MATCH (n:Organization) RETURN n
你可以试试:MATCH (n) WHERE {0} IN labels(n) RETURN n
但这不会有效率,你为什么要首先这样做?
出于查询规划器的原因,标签不允许作为参数(目前)。