创建的节点似乎没有添加到neo4j数据库中

时间:2014-10-28 07:51:40

标签: neo4j

我在一个groovy应用程序中的neo4j数据库中创建了几个节点,但是当我使用shell客户端连接到数据库时,它们似乎并不在那里。

我正在创建的数据库是http://neo4j.com/docs/stable/tutorials-java-embedded-hello-world.html

中描述的数据库
def graphDb = new GraphDatabaseFactory().newEmbeddedDatabase("/tmp/foo.db");

Transaction tx = graphDb.beginTx()
def firstNode = graphDb.createNode();
firstNode.setProperty("message", "Hello, ");
def secondNode = graphDb.createNode();
secondNode.setProperty("message", "World!");

tx.success();

System.err.print(firstNode.getProperty("message"));
System.err.print(relationship.getProperty("message"));
System.err.print(secondNode.getProperty("message"));

graphDb.shutdown()

运行应用程序后,我可以看到数据库已在文件系统上创建,但是当我从shell客户端连接时,似乎数据库中没有节点:

$ ./neo4j-community-2.1.5/bin/neo4j-shell -path /tmp/foo.db/ -v
neo4j-sh (?)$ match (m) return m;
+---+
| m |
+---+
+---+
0 row

我可能做错了什么?

1 个答案:

答案 0 :(得分:3)

您没有关闭交易。 tx.success()只是将交易标记为成功但未获得提交。要完成交易,请使用tx.close()。最佳做法是在执行Java时使用try-with-resources块 - 这需要自动调用close()

GraphDatabaseService graphDb = ...;
try (Transaction tx = graphDb.beginTx()) { 
    // do stuff
    tx.success();  
}

由于您的代码有def,我假设您正在使用groovy,它不支持try-with-resources。因此代码看起来像:

def graphDb = ....
Transaction tx = graphDb.beginTx()
try {
    // do stuff e.g. create nodes
    tx.success()
} finally {
    tx.close()
}