このクラスGraphDatabaseService
は、データベースを削除/クリアするためのメソッドを提供していないようです。Javaで現在の組み込みデータベースをドロップ/クリアする他の手段はありますか?
4 に答える
GraphDatabaseService.shutdown()を実行し、戻ってきたら、データベースファイルを削除します(このようなコードを使用)。
getAllNodes()を使用して、すべてのノードを反復処理し、それらの関係とノード自体を削除することもできます。たぶん、参照ノードの削除は避けてください。
ユースケースがテスト中の場合は、ImpermanentGraphDatabaseを使用できます。これにより、シャットダウン後にデータベースが削除されます。
ImpermanentGraphDatabaseを使用するには、neo4j-kernelテストのjar/依存関係をプロジェクトに追加します。MavenCentralで「tests.jar」で終わる名前のファイルを探します。
最も簡単な方法は、neo4jデータベースのあるディレクトリを削除することだと思います。すべてのテストを実行した後、junitテストでそれを行います。fileがneo4jディレクトリである場合に使用する関数は次のとおりです。
public static void deleteFileOrDirectory( final File file ) {
if ( file.exists() ) {
if ( file.isDirectory() ) {
for ( File child : file.listFiles() ) {
deleteFileOrDirectory( child );
}
}
file.delete();
}
}
私はそれをneo4jwikiで見つけたと思います。私はこの議論で別の解決策を見つけました。メソッドを明確にするBlueprintAPIを使用できます。
nawrothが言ったように、テストにはImpermanentGraphDatabaseを使用する必要があります。それはほとんどすべての問題を自動修正します。
テストしていない場合、実際には2つの方法があります。私は一般的に2つの方法を利用できます。1つはclearDBメソッドで、DBパスを再帰的に削除します。これにはFileUtilsライブラリを使用しますが、これはほぼ1行のコードです。
FileUtils.deleteRecursively(new File(DB_PATH));
もう1つは、removeAllNodesメソッドを使用して、参照ノードを除くデータベース内のすべてのノードを削除することです。これには簡単なクエリがあり、次のように実行します。
engine.execute("START n = node(*), ref = node(0) WHERE n<>ref DELETE n");
新しいEmbeddedGraphDatabaseオブジェクトを作成する前に、clearDBメソッドを呼び出す必要があることに注意してください。removeAllNodesメソッドは、このオブジェクトを作成した後に呼び出されます。
ヘルパークラスがあります
Neo4jHelper.cleanDb(db);
(org.springframework.data.neo4j.support.node.Neo4jHelperから取得され、参照するデータベースはGraphDatabaseServiceです)
それをダンプすることもできます:
Neo4jHelper.dumpDb();