В настоящее время я использую версию сообщества neo4j 3.5, встроенную базу данных, и у меня есть уникальное ограничение на свойство Identifier
.
Я открываю транзакцию, выполняя
Map<String, Object> properties = // Map of new properties
GraphDatabaseService service = ...
try (Transaction tx = service.beginTx()) {
// Consider the node is existing
Node node = service.findNode(label, "Identifier", identifier);
// Replace the properties on the node including identifier
neoEntity.getPropertyKeys().forEach(neoEntity::removeProperty);
graphEntity.getProperties().forEach(neoEntity::setProperty);
neoEntity.setProperty(IDENTIFIER, graphEntity.getIdentifier());
tx.success();
}
If Я делаю только это, это ведет себя так, как ожидалось, как обновление свойств. Однако, если я снова запрошу, используя тот же идентификатор в той же транзакции service.findNodes(label, "Identifier", identifier).stream().toArray()
; Я получаю две сущности с одинаковым nodeId и одинаковыми свойствами (включая идентификатор). Мне нужно запросить узел, поскольку некоторые отношения создаются / обновляются, зная только идентификаторы обоих концов, и это происходит в той же транзакции l oop. Я бы не хотел хранить в переменной все измененные узлы на случай, если они будут использоваться в отношениях.
Я думаю, он объединяется в конце транзакции, поскольку я снова запрашиваю его в другой транзакции он возвращает только один.
Итак, мой вопрос: что я делаю не так при обновлении своих свойств?
Спасибо за ваши ответы :)