Как я понимаю ваш вопрос, у вас есть несколько узлов, давайте назовем их X узлов , которые связаны с множеством узлов типа (или чем-то похожим), давайте назовем эти узлы Т узлов . X-узел может иметь подключения к нескольким T-узлам, но только одно подключение к каждому T-узлу или, возможно, только одно подключение к каждому виду T-узла (здесь ваше описание немного размыто).
Я бы смоделировал это, используя один RelationshipType для каждого (вида) T-узла. Затем вы можете использовать x_node.getRelationships (T_TYPE_ONE, T_TYPE_TWO, ... и т. Д.), Чтобы получить все T-узлы из X-узла. Когда вы изменяете X-узел, вам нужно поддерживать свой инвариант, чтобы он мог иметь не более одного отношения с каждым (своего рода) T-узлом. Вы делаете это с помощью x_node.getSingleRelationship (THE_T_TYPE_YOURE_MUTATING), если это возвращает нуль, безопасно добавить новое отношение этого типа, если оно возвращает отношение, вам придется удалить его, прежде чем вы сможете добавить новое.
ASCII-арт пример этой модели (насколько я понимаю):
(x1)--T_ONE-->(t1a) (t1b)<--T_ONE--(x2)--T_FOUR-->(t4a)
|\ |
\ |---T_TWO-->(t2a) /
\ /
|---T_THREE-->(t3a)<--T_THREE---/
В приведенном выше примере оба узла X являются частью компонентов T_ONE, но x1 является частью компонента T_ONE t1a, а x2 является частью t1b. Они оба являются частью компонента T_THREE t3a, тогда x1 является частью компонента T_TWO t2a, а x2 является частью компонента T_FOUR t4a. Запрос в этом примере будет выглядеть примерно так:
Iterable<Relationship> x1_comps = x1.getRelationships(T_ONE, T_TWO, T_THREE, T_FOUR);
Iterable<Relationship> x2_comps = x2.getRelationships(T_ONE, T_TWO, T_THREE, T_FOUR);
И обновление будет выглядеть так:
void setComponent(Node xNode, RelationshipType tType, Node tNode) {
Relationship current = xNode.getSingleRelationship(tType);
if (current != null) current.delete();
xNode.createRelationshipTo(tNode, tType);
}
Пожалуйста, дайте мне знать, если я неверно истолковал ваши требования, и я буду рад дать вашему обновленному описанию удар.