我在
Java中使用Neo4J中的cypher参数时遇到问题.我运行嵌入的数据库.
代码应该是这样的(GraphDB.cypher直接转到ExecutionEngine)
HashMap parameter = new HashMap<>();
parameter.put("theLabel1", "Group");
parameter.put("theRelation", "isMemberOf");
parameter.put("theLabel2", "Person");
GraphDB.cypher("MATCH (n1:{theLabel1})-[r:{theRelation}]->(n2:{theLabel2}) RETURN n1, r, n2", parameter);
但它以此例外结束
Exception in thread "main" Invalid input '{': expected whitespace or a label name (line 1, column 11)
"MATCH (n1:{theLabel1})-[r:{theRelation}]->(n2:{theLabel2}) RETURN n1, r, n2"
是否有另一种方法来解决此问题,而不是像这样(或使用其他模板方法)构建查询字符串
GraphDB.cypher("MATCH (n:" + labelName + ")-[r:" + relationName + "]->...
这是必需的,因为目标标签可以更改,我想完全重用代码.
提前致谢.
[[取得(叹气)没有作为答复后的行为]]
由于这种形式的参数目前(2014.6)不受支持,我将在发送查询之前运行一点替换.
HashMap parameter = new HashMap<>();
parameter.put("theLabel1", "Group");
parameter.put("theRelation", "isMemberOf");
parameter.put("theLabel2", "Person");
parameter.put("aName", "Donald Duck");
GraphDB.cypher("MATCH (n1:#theLabel1#)-[r:#theRelation#]->(n2:#theLabel2#) WHERE n2.Name = {aName} RETURN n1, r, n2", parameter);
... with ...
public static ExecutionResult cypher(String query, Map params) {
for (String key : params.keySet()) {
query = query.replaceAll("#" + key + "#", String.valueOf(params.get(key)));
}
return params == null ? cypherEngine.execute(query) : cypherEngine.execute(query, params);
}
可以有更多的阅读