2016-05-24 1 views
1

Я двигаюсь от Spring Data Neo4j 3 Спринг данных Neo4j 4.Spring Data Neo4j 4 GraphDatabaseService и result.single()

Я использую встроенную базу данных Neo4j.

Прямо сейчас я не могу переписать следующий метод:

public static void cleanDb(Neo4jTemplate template) { 
     logger.info("Cleaning database"); 
     long deletedNodesCount = 0; 
     do { 
      GraphDatabaseService graphDatabaseService = template.getGraphDatabaseService(); 
      Transaction tx = graphDatabaseService.beginTx(); 
      try { 
       Result<Map<String, Object>> result = template.query("MATCH (n) WITH n LIMIT " + BATCH_SIZE + " OPTIONAL MATCH (n)-[r]-() DELETE n, r RETURN count(n) as count", null); 
       deletedNodesCount = (long) result.single().get("count"); 
       tx.success(); 
       logger.info("Deleted " + deletedNodesCount + " nodes..."); 
      } catch (Throwable th) { 
       logger.error("Error while deleting database", th); 
       throw th; 
      } finally { 
       tx.close(); 
      } 
     } while (deletedNodesCount > 0); 
    } 

Как правильно получить graphDatabaseService в SDN4, а также result.single() отсутствует.

Пожалуйста, помогите мне переписать этот метод для SDN4.

+0

Вы используете встроенный драйвер? – Luanne

+0

Да, EmbeddedDriver – brunoid

ответ

1

Вы можете получить дескриптор GraphDatabaseService при использовании EmbeddedDriver так:

EmbeddedDriver embeddedDriver = (EmbeddedDriver) Components.driver(); 
GraphDatabaseService databaseService = embeddedDriver.getGraphDatabaseService(); 

Однако, если вы управляете транзакциями вручную, вы можете использовать @Transactional или транзакционные методы, доступные в ОГМАХ сессии ,