В настоящее время я перебираю массив, где каждый индекс содержит два узла и отношение (Part_1 -> Part_2), и я использую метод Neo4jTemplate.save() для сохранения его в базе данных. Однако некоторые индексы имеют повторяющиеся узлы, которые будут иметь отношения с другими узлами (Part_2 -> Part_3). Моя версия в настоящее время создает новый узел и связь каждый раз вместо слияния, если узел уже существует.
Я прочитал это сообщение a>, но я не понимаю, как это реализовать, чтобы два одинаковых узла имели одинаковый идентификатор. Мой текущий код работает так:
- Создайте два узла
- Создайте их отношения
- Добавить связь с узлом
- Сохраните его, используя Neo4jTemplate.save()
Что мне нужно изменить на MERGE вместо CREATE? Нужно ли мне выполнять проверку, прежде чем я буду сохраняться, или есть способ проверить, сохраняясь в SDN 4?
РЕДАКТИРОВАТЬ:
Я решил использовать метод Neo4jTemplate.query() для написания запросов Cyper, однако я не знаю, как правильно создать параметры для объединения нескольких узлов. Я могу правильно создать оператор MERGE для одного узла:
Map‹String, Object› params = new HashMap‹String, Object›();
Map‹String, Object› node = new HashMap‹String, Object›();node.put("name", "Part_1");
params.put("props", node_1);
String query = "MERGE( n1:Part {name:{props}.name})" ;template.query(запрос, параметры);
Моя цель — вызвать слияние на двух узлах, а затем снова вызвать слияние, чтобы создать отношение в одном выражении. Мой код сейчас выглядит так:
Map‹String, Object› params = new HashMap‹String, Object›();
List‹Map‹String, Object›› maps;
Map‹String, Object› node1 = new HashMap‹String, Object› ();
Map‹String, Object› node2 = new HashMap‹String, Object›();node1.put("name1", "Part_1");
node2.put("name2", "Part_2");
maps = Arrays.asList(node_1, node_2)params.put("props", maps);
String query = "MERGE( n1:Part {name:{props}.name1})
MERGE( n2:Part {name:{props}.name2)
MERGE(n1)-[:СОЗДАН]->(n2)";template.query(запрос, параметры);
Все примеры, которые я видел до сих пор с несколькими узлами в параметрах просто просто перебирайте все это при вызове. Я не нашел примеров, в которых есть параметры, в которых вы можете указать определенный узел, на который вы ссылаетесь. Как создать параметр, в котором я ссылаюсь на определенный узел? Заранее спасибо!