Отношения сущностей с глубиной 1, также выбирающие отношения узла - PullRequest
0 голосов
/ 23 января 2019

Я использую neo4j-ogm 3.1.5 в моем проекте.

В моем коде, когда я выбираю любую сущность отношения с depth = 1, она выбирает startNode и endNode, а также извлекает отношения startNode и endNode.По сути, это параметр глубины, работающий как depth = depth + 1, потому что то же значение глубины передается узлам при извлечении объекта отношения.

AFAIK понимает, что параметр глубины используется в основном как загрузка LAZY или EAGER в спящем режиме.В SchemaRelationshipLoadClauseBuilder классе это происходит в методе

public String build(String variable, String label, int depth)

Шаги для воспроизведения

Извлечение сущности отношения с использованием findById method

Текущая реализация

В SchemaRelationshipLoadClauseBuilder следующий метод:

public String build(String variable, String label, int depth)
  • вызывает expand(sb, "n", start, depth) вместо expand(sb, "n", start, depth-1), И
  • вызывает expand(sb, "m", end, depth) вместо expand(sb, "m", end, depth-1).

Дело в том, что это вызовет проблему в моем проекте, так как startNode и endNode соответствующего объекта отношения могут иметь более 100 000 отношений одного вида, и выборка всех этих отношений займетпамять устройства.

Кто-нибудь может объяснить, почему это так?

1 Ответ

0 голосов
/ 11 февраля 2019

Причиной такого поведения является не ошибка, а природа запроса Cypher.Вы не можете загрузить отношения самостоятельно.Для формирования правильного запроса должны быть начальный и конечный узлы.

Затем глубина будет применена к обоим узлам.Конечно, это более или менее своего рода определение, если вы уже взяли один «переход» из отношения к узлам, но это, безусловно, также поставит под сомнение общую модель глубины в Neo4j-OGM, потому что внезапно каждое отношение (не касаясь узла) будетсчитается прыжком, и следующим будет попадание в узел.

...