Neo4j Spring OGM-запрос для списка сущностей всегда возвращает различные - PullRequest
0 голосов
/ 24 февраля 2020

Допустим, у меня есть график:

A - follows -> B
A - follows -> C

Теперь у меня есть запрос, чтобы получить подписчиков как для B, так и C (который должен вернуть мне A 2 раза).

MATCH (a)<-[:FOLLOWS]-(followers) 
WHERE a.username IN ['B','C']
RETURN followers

Если я сделаю этот запрос через браузер Neo4J, я получу 2 records: A node 2 раза. Это правильно.

Если я сделаю тот же запрос через репозиторий Spring, я получу список только с 1 object (A).

Итак, через репозиторий Spring любой запрос для сущностей работает так, как будто я добавляю DISTINCT, поэтому нет разницы между обычным запросом и DISTINCT единицей.

Если я запрашиваю какое-то свойство узла, то есть A.username, я получаю список с двумя дублирующимися строками (по назначению).

  1. Ожидается ли такое поведение?
  2. Почему?
  3. Существует ли способ запроса полных сущностей с дубликатами, так же, как запрос Cypher работает в самом Neo4J?

1 Ответ

0 голосов
/ 25 февраля 2020

В общем, это правильное поведение: A всегда одинаково и отображается как один объект. Не будет никакого смысла создавать один и тот же объект дважды.

Я не знаю из вашего вопроса, к чему должен быть привязан запрос. Но при условии, что он должен создать List<A> для этого запроса, это правильно. Возвращение a.username не отобразится ни на одну сущность, но может быть получено только в проекции / @QueryResult. Этот результат не имеет понятия равенства или сходства и всегда создается для любой возвращенной «строки» из ответа.

...