我正在将我的系统与 neo4j 集成,使用 Cypher 查询语言创建节点对我来说很有趣,因此,作为测试,我正在尝试执行以下操作:

String path = "test.graphdb";

AbstractDatabase db = new Neo4jDatabase(path, true, false);

db.makeQuery("CREATE (n:Dog {name:'Sofia'})");
db.makeQuery("CREATE (n:Dog {name:'Laika'})");     db.makeQuery("CREATE (n:Dog {name:'Gaia'})");

Result result = db.makeQuery("MATCH (n:Dog) RETURN n");

boolean hasNext = result.hasNext();

System.out.println(hasNext);

在 Neo4jDatabase 类中,我有这个 makeQuery 方法,它是这样的:
public Result makeQuery(String string)
{
    try(Transaction ignored = this.db.beginTx();
        Result result = this.db.execute(string) )
    {
        return result;
    }

}

不幸的是,它返回 false,就好像节点尚未创建一样!怎么了?

最佳答案

你自己说,你忽略了交易:)

成功迭代结果后,您应该在事务块中调用 tx.success()

当您已经关闭交易时不要分发结果,其中的数据将无法在 tx 之外访问。

对于这些简单的语句,您还可以将 tx-handling 留给 cypher,无需启动手动事务。

但是你必须迭代或 result.close() 你的结果来完成 Cypher 操作。

关于java - 使用 Cypher 在嵌入式 Neo4J 应用程序中创建节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36237494/

10-16 03:02