자바에서 Neo4J의 cypher에있는 매개 변수에 문제가 있습니다. 나는 임베디드 데이터베이스를 실행한다.Neo4J에서 Java의 사이퍼 쿼리에서 매개 변수로 레이블을 설정하는 방법은 무엇입니까?
코드는 다음과 같이해야한다 (GraphDB.cypher가 ExecutionEngine로 직접 이동)
HashMap<String, Object> 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"
문서 (및 튜토리얼)로 끝나는은을 사용하도록 지시 {}를 사용하여 매개 변수를 처리 할 수 있지만 속성의 cypher json 표기법으로도 사용됩니다. @see http://docs.neo4j.org/chunked/milestone/tutorials-cypher-parameters-java.html
GraphDB.cypher("MATCH (n:" + labelName + ")-[r:" + relationName + "]->...
대상 레이블을 변경하고 내가 원하는 때문이 필요한이 문제를 해결하기보다는 (다른 템플릿 방법을 나와) 같은 쿼리 문자열을 구축하는 또 다른 방법이 있나요 코드를 완전하게 재사용 할 수 있습니다.
미리 감사드립니다.
는 [난 후에 편집 된 (한숨) NO ANSWER는 바와 같이] 파라미터의 형식은 (2014.6)에서 지원하지 않기 때문에
, I 바로 조회를 전송하기 전에 약간의 대체물을 실행한다.
HashMap<String, Object> 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<String, Object> 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);
}
내가이 순간에 지원되지 않습니다 두려워 더 readble
음,하지만이 기능이 종류를 제공하기 위해 Neo4j의 범위를 벗어나 좀있다,하지 너 생각하니? – Rolf
@ Raxa, "replacer"를 가진 당신의 솔루션은 매우 흥미 롭습니다. 언뜻보기에 "# theLabel1 #"을 사용하는 것은 정적 인 것처럼 보이므로 Cypher의 'label'을 'parameter'로 '동적으로'지정하는 진정한 문제는 해결하지 못했습니다. 그러나 단순히 '매개 변수'에서 일치로 대체 될 자리 표시 자로 간주 될 때 동적으로 '레이블'을 전달합니다.오는 표준 솔루션이 있는지 확실하지 않지만 매우 흥미로운 완화 방법입니다. – Causality