2011-03-17 1 views

Répondre

6

Il suffit d'effectuer un GraphDatabaseService.shutdown() et après son retour, supprimez les fichiers de base de données (en utilisant le code this).

Vous pouvez également utiliser getAllNodes() pour parcourir tous les nœuds, supprimer leurs relations et les nœuds eux-mêmes. Peut-être éviter de supprimer le nœud de référence.

Si votre cas d'utilisation est en cours de test, vous pouvez utiliser le ImpermanentGraphDatabase, qui supprimera la base de données après l'arrêt.

Pour utiliser ImpermanentGraphDatabase, ajoutez le fichier jar/dependency de neo4j-kernel tests à votre projet. Recherchez le fichier dont le nom se termine par "tests.jar" on maven central.

+0

Y a-t-il un moyen autre que de supprimer des fichiers? – zbdiablo

+0

Voir http://wiki.neo4j.org/content/Testing_with_Neo4j#Use_the_ImpermanentGraphDatabase – DNA

1

Je pense que le moyen le plus simple est de supprimer un répertoire avec la base de données neo4j. Je le fais dans mes tests de junit après avoir exécuté tous les tests. Voici une fonction que j'utilise où fichier est le répertoire Neo4j:

public static void deleteFileOrDirectory(final File file) { 
    if (file.exists()) { 
     if (file.isDirectory()) { 
      for (File child : file.listFiles()) { 
       deleteFileOrDirectory(child); 
      } 
     } 
     file.delete(); 
    } 
} 

Je pense que je l'ai trouvé sur le wiki Neo4j. J'ai trouvé dans this discussion une autre solution. Vous pouvez utiliser Blueprint API, qui fournissent la méthode clear.

1

Comme dit nawroth, pour le test, vous devez utiliser la base de données ImpermanentGraph. Il corrige à peu près tous vos problèmes.

Si vous ne testez pas, il y a vraiment deux façons. J'ai généralement deux méthodes à ma disposition. L'une est la méthode clearDB, dans laquelle je supprime récursivement le chemin DB. J'utilise la bibliothèque FileUtils pour cela, et il est à peu près une seule ligne de code:

FileUtils.deleteRecursively(new File(DB_PATH)); 

L'autre est de supprimer tous les noeuds dans la base de données SAUF LA REFERENCE NODE, en utilisant la méthode removeAllNodes. Il y a une requête simple pour cela, que vous exécutez comme ceci:

engine.execute("START n = node(*), ref = node(0) WHERE n<>ref DELETE n"); 

Important à noter est que vous devez appeler la méthode clearDB avant de créer un nouvel objet EmbeddedGraphDatabase. La méthode removeAllNodes est appelée après que vous avez créé cet objet.

0

Il y a une classe d'aide

Neo4jHelper.cleanDb(db); 

(il vient de org.springframework.data.neo4j.support.node.Neo4jHelper et db vous faites référence est un GraphDatabaseService)

Vous avez également la capacité de le vider:

Neo4jHelper.dumpDb(); 
Questions connexes