Я хочу скопировать несколько узлов, а затем удалить старые одновременно. Для этого я написал многопоточное java-приложение. Мой шифровальный запрос выглядит следующим образом:
String cypher= "MATCH (a:Person {surname:\""+ Thread.currentThread().getName()+"\"})
create (b:Person)
set b.surname=a.surname
SET b.version = '2'
WITH a,b
MATCH (a)-[r:has_indication]->(c)
WITH COLLECT(r) AS rels, a, b, c
FOREACH (rel in rels |
CREATE (b)-[r2:has_indication]->(c)
SET r2+=rel
)
with a,b,c
MATCH (c)-[r3:has_indication]->(a)
WITH COLLECT(r3) AS rels2, a, b, c
FOREACH (rel in rels2 |
CREATE (c)-[r3:has_indication]->(b)
SET r3+=rel
)
DETACH DELETE a " ;
и мой Java-код выглядит следующим образом:
public void run() {
Driver driver = GraphDatabase.driver(
"bolt://localhost:7687", AuthTokens.basic("neo4j", "neo4j"));
Session session = driver.session();
session.runAsync( cypher);
}
Я использую 3 потока, когда три узла связаны друг с другом, обновляется только один узел, но когда эти узлы не связаны друг с другом, все три узла обновлены успешно. Как я могу обновить их, даже если они связаны друг с другом одновременно? Я использую neo4j enterprise версии 3.4.7.