Neo4J:用户定义的过程不喜欢定期提交?

时间:2018-02-22 16:47:48

标签: neo4j cypher

我正在尝试开发一个Neo4J程序,它从数据库导入节点,将它们转换为CSV并将它们加载到neo4j中。

我一直坚持以下方面:作为单元测试运行该过程正常。但是,当我尝试在Neo4J Desktop中运行该过程时,我不断收到此异常:

org.neo4j.graphdb.QueryExecutionException: Executing stream that use periodic commit in an open transaction is not possible.
        at org.neo4j.kernel.impl.query.QueryExecutionKernelException.asUserException(QueryExecutionKernelException.java:35)
        at org.neo4j.kernel.impl.proc.ProcedureGDBFacadeSPI.executeQuery(ProcedureGDBFacadeSPI.java:147)
        ....

当我在db.execute(..) db。

上调用GraphDatabaseService时会发生这种情况

确切的查询如下所示:

USING PERIODIC COMMIT 1000 
LOAD CSV WITH HEADERS FROM "file:/nodes_Class.txt" AS cl 
MERGE (n:Class { iri: cl.iri})

如果我在Neo4J Desktop中单独运行完全相同的查询,则导入的所有节点都没有问题。现在我读到了Periodic提交can only be executed in "Auto-commit transactions"。以愚蠢的方式提问:我如何告诉我的程序允许执行定期提交?

1 个答案:

答案 0 :(得分:1)

您正在尝试创建一个插件程序,该程序需要(非Bolt)Java API。但是documentation that you referenced适用于Bolt Driver API,这是完全不同的(是的,这可能有点令人困惑)。

使用Java API(适用于插件),您必须调用" USING PERIODIC COMMIT"条款在交易之外

所以,不要在这样的事务中执行Cypher代码:

try (final Transaction tx = db.beginTx()) {
    db.execute( "USING PERIODIC COMMIT ..." );
    tx.success();
}

只需在交易外执行:

db.execute( "USING PERIODIC COMMIT ..." );