java-使用Cypher在嵌入式Neo4J应用程序中创建节点

我正在将系统与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处理留给cypher,而无需启动手动交易.

但是您必须遍历或result.close()您的结果才能完成Cypher操作.

上一篇:neo4j本人常用CQL语句


下一篇:java-Neo4j:2.2.3:“检测到错误地关闭数据库,执行恢复”后,服务器无法启动