2015-01-14 5 views
0

У меня есть отдельная база данных Neo4j 2.1.6. Я начал с веб-проекта Spring Spring и добавил Spring Data Neo4j 3.2.1 Release. Я пытаюсь отобразить узлы внутри пути. Я хотел бы иметь возможность вытащить дерево неопределенной глубины и сопоставить его с объектами java.Spring Data Neo4j Entity Path mapping

этот запрос:

match p=(a:fakea)-[*]->(:fakeb) where a.aId = 1 
return p; 

возвращает два пути:

{"start":"http://localhost:8180/db/data/node/593222","nodes":["http://localhost:8180/db/data/node/593222","http://localhost:8180/db/data/node/593223","http://localhost:8180/db/data/node/593224","http://localhost:8180/db/data/node/593225"],"length":3,"relationships":["http://localhost:8180/db/data/relationship/2489542","http://localhost:8180/db/data/relationship/2489543","http://localhost:8180/db/data/relationship/2489544"],"end":"http://localhost:8180/db/data/node/593225"} 

{"start":"http://localhost:8180/db/data/node/593222","nodes":["http://localhost:8180/db/data/node/593222","http://localhost:8180/db/data/node/593223","http://localhost:8180/db/data/node/593226","http://localhost:8180/db/data/node/593227"],"length":3,"relationships":["http://localhost:8180/db/data/relationship/2489542","http://localhost:8180/db/data/relationship/2489545","http://localhost:8180/db/data/relationship/2489546"],"end":"http://localhost:8180/db/data/node/593227"} 

Я попытался отображения его несколько различных способов, используя информацию, которую я нашел здесь:

Spring data wth ne04j error...error while retrieving paths

@Query shortestPath return type in Spring Data Neo4j

Мой текущий репозиторий:

public interface FakeRepository extends GraphRepository<FakeA> { 

@Query("match p=(a:fakea)-[*]->(:fakeb) where a.aId = {0} return p;") 
public EntityPath<FakeA, FakeB> getTree(Long aId); 

Я также попытался создать общий абстрактный класс:

public interface FakeRepository extends GraphRepository<FakeAbs> { 

@Query("match p=(a:fakea)-[*]->(:fakeb) where a.aId = {0} return p;") 
public EntityPath<FakeAbs, FakeAbs> getTree(Long aId); 

Я не могу получить какие-либо полезные данные. Я также не могу найти класс EndResult, упомянутый в опубликованных вами сообщениях. Я также попробовал обернуть EntityPath с результатом (также в репо).

Result<EntityPath<FakeAbs, FakeAbs>> path = fr.getTree(1l); 
EntityPath<FakeAbs, FakeAbs> first = path.iterator().next(); 
first.endNode(); 

поднимает:

Null pointer: 
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause 

java.lang.NullPointerException: null 
    at org.springframework.data.neo4j.support.path.ConvertingEntityPath.endNode(ConvertingEntityPath.java:112) 

Я получаю подобные пустые указатели при попытке исследовать любые другие части конструкции EntityPath (длина(), например).

Как я могу обработать структуру дерева с различной глубиной и отобразить результаты в правильные узловые объекты? Я специально хочу, чтобы узлы содержались в пути.

+0

Вы пытаетесь получить информацию о Пути или хотите определить определенные узлы в пути? –

+0

Я пытаюсь получить конкретные узлы в пути. Я буду редактировать свой оригинальный вопрос для ясности. – jake

+0

Перейти к этой ссылке для решения: https://stackoverflow.com/questions/32962032/how-do-i-query-for-paths-in-spring-data-neo4j-4?rq=1 – joe

ответ

0

Попробуйте

Вместо того, что у вас есть сейчас:

public interface FakeRepository extends GraphRepository<FakeA> { 

@Query("match p=(a:fakea)-[*]->(:fakeb) where a.aId = {0} return p;") 
public EntityPath<FakeA, FakeB> getTree(Long aId); 

Использование:

public interface FakeRepository extends GraphRepository<FakeA> { 

@Query("start p=node{0} match (p)-[*]->(a:fakea) return a;") 
public FakeA getTree(FakeA fakeA); 

Этот запрос будет взять экземпляр FakeA и найти FakeA, что оно связано с , предполагая в этом случае, что существует только одно совпадение. Если их может быть больше одного, замените подпись метода meth, чтобы вернуть Set.

Однако, я думаю, вы тоже работаете слишком сильно и не используете встроенные динамические искатели Spring Data. Я рекомендую вам пройти этот хороший учебник: Getting Started With Spring Data and Neo4J

+0

Решение Я закончил использовать, чтобы вернуть один объект и сопоставить необходимые мне отношения, используя аннотации Withto и Fetch.С тех пор я обнаружил, что это один из самых медленных способов достичь этого. http://jexp.de/blog/2014/12/spring-data-neo4j-improving-remoting-performance/ – jake

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