Spring Data Neo4J 4.0.0: какова правильная последовательность вызовов для поиска по свойству?

Я делаю простой поиск Camel Case на узле в Neo4J 4.0.0.M1:

e.g.

UserRepository.findByUserId(String userId);  

Я вижу в своем файле журнала, что генерируется правильный запрос Cypher:

match (u:User) where u.userId = {0} return u

и я могу запустить этот код в браузере Neo4J с ожидаемым результатом возврата одного узла. Я также вижу, что генерируется правильный JSON

e.g.

21:53:39.819 [tomcat-http--37] INFO  o.n.o.session.request.DefaultRequest - POST http://localhost:7474/db/data/transaction/commit, request: {"statements":[{"statement":"match (u:User) where u.userId = {0} return u","parameters":{"0":"145"},"resultDataContents":["graph"]}]}

и я могу запустить это из PostMaster и получить ожидаемый результат возврата одного узла.

Однако выполнение этого через код с именованным запросом в GraphRepository возвращает каждый узел, который в настоящее время, как я полагаю, находится в Neo4JSession.

Вот пользовательский репозиторий:

@Repository
public interface UserNodeRepository extends GraphRepository<User> {

    @Query ("match (u:User) where u.userId = {0} return u")
    public List<User> findByUserId(String userId);

}

Запуск этого кода возвращает всех пользователей, которых я когда-либо создавал в Neo4J.

Обратите внимание, что я изменил возвращаемый тип на список, потому что ожидаемое поведение одного возвращаемого узла не происходило, и я получал исключение сопоставления. Также обратите внимание, что здесь есть именованный запрос, потому что я не был уверен, что проблема может быть связана с поиском Camel Case по сравнению с именованным запросом.

Это также работало правильно в Neo4J 3.3.x.

Кроме того, я проследил проблему до Neo4JSession.query(), где выполняется вызов Neo4JSession.query, который, в свою очередь, делает следующее:

return getResponseHandler().loadAll(type, response);

Это возвращает все узлы в MappingContext с заданным типом класса. Я считаю, что он должен вызывать Neo4JSession.loadByProperty, который выполняет поиск на узле.

Есть ли настройка, которую мне не хватает?


person Dana James    schedule 23.04.2015    source источник


Ответы (1)


Исправлена ​​ошибка, из-за которой @Query возвращал нежелательные результаты после выпуска M1. Не могли бы вы использовать сборку снимка, чтобы попробовать это снова?

http://repo.spring.io/libs-snapshot/org/springframework/data/spring-data-neo4j/4.0.0.BUILD-SNAPSHOT/

person Luanne    schedule 23.04.2015
comment
Спасибо. Я не был уверен, было ли это ошибкой или новой функцией версии 4.0.0, требующей дополнительной настройки. - person Dana James; 23.04.2015