Картирайте произволни отношения чрез Neo4j OGM

Neo4j OGM поддържа произволни свойства на възел, които се съпоставят към класове обекти чрез @Convert и CompositeAttributeConverter, но какво ще кажете за частта за релацията? Как бих картографирал произволни отношения в @NodeEntity?

Действителните свойства и релации, използвани в моя модел на данни, са конфигурируеми, т.е. те не са известни по време на компилиране. Пример: Конфигурацията определя възли с етикет A и B и връзка от A към B, наречена REL_1. Сега, когато правя заявки за възли на етикет A, тогава бих искал да извлека и картографирам релациите в съответния резултатен обект на възел.

Опитах се да създам cypher заявки в зависимост от конфигурацията, но съм заседнал в извличането на релации, чийто краен възел трябва да бъде картографиран от OGM. Ето моята опростена генерирана структура на заявка:

MATCH (n:A) RETURN n, [(n)-[rn:REL_1]-(n2) | [rn, n2]]

Аз също опитах

MATCH (n:A) RETURN n, [[(n)-[rn:REL_1]-(n2) | [rn, n2]]]

което е същият модел, който се генерира от OGM при извикване на session.load с фиксиран модел на данни. И двете заявки обаче не картографират n2 в резултата от session.query повикване. Вместо това върнатият тип за n2 е NodeModel, но не искам да го картографирам сам, защото OGM вече може да го направи. Какво не е наред с моята заявка? Или това е грешка?

Забележка: Тази заявка ще свърши работа, но изглежда като странно решение.

MATCH (n:A) RETURN n, [(n)-[rn:REL_1]-() | rn], [(n)-[:REL_1]-(n2) | n2]

Използвам Neo4J 3.5 с включен OGM 3.2.3 чрез Sprint Boot 2.2.2.


person Steffen Harbich    schedule 25.12.2019    source източник
comment
de във вашите заявки не е дефиниран. Имахте предвид n?   -  person cybersam    schedule 03.01.2020
comment
Да, прав си.   -  person Steffen Harbich    schedule 04.01.2020
comment
Подаде проблем: github.com/neo4j/neo4j-ogm/issues/737   -  person Steffen Harbich    schedule 10.01.2020
comment
Този проблем е коригиран с OGM 3.2.4.   -  person Michael Simons    schedule 13.01.2020


Отговори (1)


Това може да се дължи на идиосинкразия на разбиране на шаблони изпълнение.

Тази по-проста Cypher заявка работи ли за вас?

MATCH (n:A)-[rn:REL_1]-(n2) RETURN n, COLLECT({rn: rn, n2: n2})
person cybersam    schedule 07.01.2020
comment
За съжаление не. n2 все още не е картографиран от OGM. Освен това тази структура на заявката би довела до много промени в заявките ми. Ще подам проблем в проекта github OGM, да видим дали ще го потвърдят като грешка. Все пак благодаря за предложенията! - person Steffen Harbich; 10.01.2020