2016-05-10 2 views
0

настоящее время я использую SDN 4 и пробует сделать следующий запрос:Spring Data Neo4j найти узлы по меткам

@Query("MATCH (n:TNode:{0}) RETURN n") 
Collection<TNode> getNodes(String type); 

, где каждый узел имеет общую метку "TNode" и индивидуальный ярлык type. Однако он всегда возвращает синтаксическую ошибку. Я уверен, что запрос правильный, потому что он возвращает узлы с помощью веб-клиента Neo4j.

Возникает ли ошибка, поскольку SDN не может найти узлы по label?

ответ

2

Это ограничение Cypher, а не SDN. Ярлыки (или типы отношений) в качестве параметров не поддерживаются. См. this and related feature requests.

Вы можете обойти эту проблему с помощью которой (п) функция и положения метки:

MATCH (n:TNode) 
WHERE {0} in labels(n) 
RETURN n 

Это приходит с оговоркой - она ​​будет проходить через все узлы совпавших по п MATCH. В вашей ситуации наличие метки TNode может решить проблему, но, как правило, простая MATCH (n) будет проходить через все узлы в базе данных, что будет очень медленным.

Другой вариант должен был бы построить запрос вручную и использовать org.springframework.data.neo4j.template.Neo4jOperations # queryForObjects для выполнения запроса:

String query = "MATCH (n:TNode:" + type + ") RETURN n"; // ugly, but works, beware of query injections etc.. 
Collection<TNode> nodes = neo4jOperations.queryForObjects(TNode.class, query, params); 
Смежные вопросы