Spring Data Neo4j 4 GraphDatabaseService и result.single()

Я перехожу с Spring Data Neo4j 3 на Spring Data Neo4j 4.

Я использую базу данных Embedded 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.


person brunoid    schedule 24.05.2016    source источник
comment
Вы используете встроенный драйвер?   -  person Luanne    schedule 24.05.2016


Ответы (1)


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

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

Однако если вы управляете транзакциями вручную, вы можете использовать @Transactional или методы транзакций, доступные в сеансе OGM.

person Luanne    schedule 25.05.2016