特定の基準に基づいて、すべてのノードをトラバースし、すべてのノード (およびその関係と接続されたノード) を削除する必要があります。テスト目的で (トラバース中にノードを削除できることを確認するため)、トラバースの途中で 1 つのノードを削除し、別のトラバーサルを使用してそのノードに接続されているすべてのノードと関係を削除しようとしています。すべてのノードと関係を削除できますが、その後、ループが最初のトラバーサルに戻ったときに 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();
}