2014-01-11 6 views
0

Я не могу поймать, что я делаю неправильно. Я могу запустить запрос на консоли neo4j с жестко заданными значениями.Neo4j с запросом данных Spring

Я пытаюсь сделать следующий запрос на моем хранилище класса:

@Query("START user=node({0}) \n" + 
     "MATCH (anotherUser) \n" + 
     "WHERE NOT (anotherUser<-[:MATCHES]-user) AND NOT user = anotherUser \n" + 
     "RETURN anotherUser") 
Iterable<User> findMatchesForUser(User user); 

Результат запроса должен быть все узлы пользователей, которые не имеет: МАТЧИ край между пользователем я нахожусь передавая в качестве аргумента.

я получаю следующее исключение:

SEVERE: Servlet.service() for servlet [mvc-dispatcher] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: Error executing statement START user=node({0}) 
MATCH (anotherUser) 
WHERE NOT (anotherUser<-[:MATCHES]-user) AND NOT user = anotherUser 
RETURN anotherUser; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: Error executing statement START user=node({0}) 
MATCH (anotherUser) 
WHERE NOT (anotherUser<-[:MATCHES]-user) AND NOT user = anotherUser 
RETURN anotherUser; nested exception is `,' expected but `W' found 

Я также считаю, что это рядный с примером here. Любой совет будет оценен.

+0

Какие версии вы используете? –

+0

Весна 3.2, Spring-Data-neo4j 2.3.2, и neo4j 1.8. Я никогда не мог запустить neo4j 2.0, я застрял с «Unsupported major.minor version 51.0» при построении и решил придерживаться 1.8 на данный момент. – rantunes

+1

Я настоятельно рекомендую перейти на Neo4j 1.9, если 2.0 не является вариантом. Зачем придерживаться 1,8? Миграция не должна быть слишком сложной, если таковая имеется. – tstorms

ответ

0

Я был в состоянии получить тот же результат с помощью следующего запроса:

@Query("START n=node({0}), a=node(*) \n" + 
     "MATCH (n)-[r?:MATCHES]->(a) \n" + 
     "WHERE has(a.__type__) AND r IS NULL AND a <> n \n" + 
     "RETURN a"); 
Iterable<User> findMatchesForUser(User user); 

По причине я до сих пор не могу понять, мне пришлось добавить есть (. А тип) для моего запрос на работу, или он будет бросать «Не удалось написать свойство JSON:« type », не найденное для NodeImpl # 0, при попытке его сериализации.

+0

Но это действительно неэффективный запрос, не сделал бы этого. –

+0

@MichaelHunger, как вы думаете, что я могу сделать, чтобы улучшить производительность запросов? – rantunes

Смежные вопросы