我正在尝试开发一个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"。以愚蠢的方式提问:我如何告诉我的程序允许执行定期提交?
答案 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 ..." );