2016-06-28 5 views
0

мне нужна метод хранилища Spring Data Neo4j, который принимает в качестве входных данных списка имен и возвращает все узлы с определенной меткой, которые имеют одно из этих имен, с глубиной 1.SDN 4 запроса по списку свойств с глубиной 1

Например:

Set<Person> findAllByName(Set<String> names) 

должен возвращать набор, содержащий все лица, чьи имена в «имена» набор включая все их непосредственные дочерние узлы.

Я открыт для написания пользовательских запросов, фильтров или чего-либо еще, я просто хочу заставить это работать как-то.

Я уже пробовал писать пользовательскую реализацию репозитория, используя Neo4jOperations.loadAllByProperties, но я не могу понять, как создать фильтр, который соответствует списку.

Спасибо, Alex

ответ

1

Вы можете использовать Cypher запрос как следующий в вашем репозитории:

@Query("MATCH (a:Person) "+ 
     "WHERE a.personId IN {0} " + 
     "RETURN a ") 
List<Person> getPersonList(Set<String> personSet); 

Тогда просто вызовите запрос хранилища в контроллере:

List<Person> listPerson = personRepository.getPersonList(names); 

EDIT: поскольку вы хотите, чтобы отношения Person также были заполнены, что-то вроде следующего работа, на основании this запись в блоге:

@Query("MATCH (a:Person) "+ 
     "WHERE a.personId IN {0} "+ 
     "WITH a "+ 
     "MATCH p=(a)-[r*0..1]-()"+ 
     "RETURN a, nodes(p), rels(p)") 
List<Person> getPersonList(Set<String> personSet); 
+0

Это не относится к части глубины. Мне нужны люди в ответе, чтобы все отношения были заполнены (глубина 1) –

+0

Это правильно. Основываясь на разделе «Все связанные с этим объекты» [this] (http://graphaware.com/neo4j/2016/04/06/mapping-query-entities-sdn.html), возможно, мое редактирование будет работать. К сожалению, я не могу проверить это сам в данный момент. – Sevle