Как я могу получить все отношения из базы данных (spring-data-) neo4j?

Есть ли способ просто получить все отношения определенного типа, где тип представляет собой аннотированный класс @RelationshipEntity, из базы данных spring-data-neo4j [SDN]? (работает с 2.0.0.RC1 и встроенной БД)

Когда я пробую метод, предоставленный SDN:

relationShipRepository.findAll()

это дает мне следующую ошибку:

org.neo4j.graphdb.NotFoundException: __type__ property not found for RelationshipImpl #9672 of type 7 between Node[4844] and Node[4875].

Полная трассировка стека: http://pastebin.com/j2gqcjxh (хотя поиск

Решением было бы использовать низкоуровневый (neo4j) API (а именно GraphDatabaseService ) для получения всех узлов, а затем для каждого узла извлекать все их отношения и проверять, соответствует ли их поле __type__ типу отношений, которые меня интересуют. Но тогда зачем предоставлять метод findAll для отношений?

Простое объяснение заключается в том, что рекомендуемый интерфейс одинаков для узлов и отношений, но говорится ли в какой-либо документации, что нам не разрешено использовать findAll для отношений?

Или: изучив объект отношения в базе данных, он противоречит исключению, потому что тип определен правильно, как и ожидалось, и можно восстановить отношение через высокоуровневый (SDN) API после того, как вы получили узел и вы позвони getRelationship*(..)

Другое замечание: кто-нибудь знает, будет ли служба ImpermanentDataGraph включена в версию 2+?


person Matyas    schedule 02.12.2011    source источник


Ответы (1)


Вы ищете отношения, созданные как Relationship-entities в SDN, или все отношения?

Каков ваш прецедент?

Relationship-Entites также добавляются в индекс. Является ли отношение 9672 сущностью отношения?

Для Relationship-Repository — это зависит от TypeRepresentationStrategy, если используется «индексированная стратегия», Relationship-Enties также доступны в соответствующем репозитории (но не глобально).

В Neo4j 1.6.M01 появился новый класс [GlobalGraphOperations][1], в котором также есть getAllRelationships().

ImpermanentGraphDatabase не входит в цепочку инструментов тестирования Neo4j. И он останется там (и улучшится производительность) в версии 2+.

person Michael Hunger    schedule 02.12.2011
comment
Да, 9672 — это RelationshipEntity, созданный relateTo, который используется как RelClass rel = nodeEntity.relateTo(otherNodeEntity, RelClass.class, RELATIONSHIP_NAME);. RelClass имеет аннотацию @RelationshipEntity. В некоторых частях приложения я извлекаю данные из поля с аннотацией @RelatedToVia. Тем не менее, я не могу получить его, используя метод findAll соответствующего репо. - person Matyas; 02.12.2011
comment
Если проблема не устранена, не могли бы вы поднять вопрос (с тестовым примером, показывающим это) на spring.neo4j.org /проблемы ? - person Michael Hunger; 05.02.2012
comment
Проблема больше не присутствует (1.6M02). Спасибо за вашу помощь (и извините, что не ответили вам). И если я обнаружу подозрительное поведение, подтвержденное тесткейсом, я опубликую это там. В настоящее время я не встречал таких проблем. - person Matyas; 05.02.2012