我需要遍历所有节点并根据某些标准删除所有节点(及其关系和连接节点)。出于测试目的(以确保我可以在遍历时删除节点),我试图只删除遍历中间的一个节点并使用另一个遍历来删除附加到该节点的所有节点和关系。我能够删除所有节点和关系,但之后当循环返回第一次遍历时,我得到了 IllegalStateException(节点已被删除)。遍历时是否可以删除节点/关系?如果是这样,遍历所有节点并沿途删除一些节点的有效方法是什么。提前致谢!
private void traverseGivenNode(Node node, TraversalDescription friendsTraversal) {
for ( Node currentNode : friendsTraversal.traverse(node).nodes() )
{
if (currentNode.getProperty("name").equals("AAA")) {
deleteNodeAndItsConnections(currentNode);
}
}
}
private void deleteNodeAndItsConnections(Node currentNode) {
TraversalDescription traversal = graphDb.traversalDescription()
.breadthFirst()
.uniqueness( Uniqueness.NODE_PATH ).evaluator(Evaluators.excludeStartPosition() ).relationships( RelTypes.KNOWS, Direction.OUTGOING );
for ( Node node : traversal.traverse(currentNode).nodes() )
{
deleteNode(node);
}
deleteNode(currentNode);
}
private void deleteNode(Node node) {
Iterable<Relationship> allRelationships = node.getRelationships();
for (Relationship relationship : allRelationships) {
relationship.delete();
}
node.delete();
}