我刚刚开始使用Neo4j并运行"Hello“类型的示例。
我创建一个新数据库并打印出节点数,即1(因为创建数据库时似乎存在默认节点)。
我创建一个节点并将其添加到图中。该图表报告说,现在有两个节点-好的。
然后我再次删除节点,图表报告有一个节点- OK。
然后我关闭了数据库。
但是,当我再次运行相同的代码时(不删除数据库文件)。现在它报告说最初有两个节点。不是1-2-1,而是2-3-2。这只发生一次--在第一次运行之后,它总是报告2-3-2。
为什么我删除的节点会重新出现,但仅仅是第一次出现?
代码如下:
package com.foo.neo.example;
import org.neo4j.graphdb.*;
import org.neo4j.kernel.EmbeddedGraphDatabase;
public class Deleting
{
static GraphDatabaseService graphDb;
public static void main(String[] args)
{
graphDb = new EmbeddedGraphDatabase("data");
System.out.println("STARTED");
printNodeCount();
Node firstNode;
Transaction tx = graphDb.beginTx();
try
{
firstNode = graphDb.createNode();
tx.success();
}
finally
{
tx.finish();
}
printNodeCount();
// delete the data again
tx = graphDb.beginTx();
try
{
firstNode.delete();
tx.success();
}
finally
{
tx.finish();
}
printNodeCount();
graphDb.shutdown();
}
private static void printNodeCount()
{
long nodecount = ((EmbeddedGraphDatabase) graphDb).getConfig()
.getGraphDbModule().getNodeManager()
.getNumberOfIdsInUse(Node.class);
System.out.println("Node count = " + nodecount);
}
}和产出:
STARTED
Node count = 1
Node count = 2
Node count = 1第二次(及随后的)运行:
STARTED
Node count = 2
Node count = 3
Node count = 2发布于 2011-12-03 00:23:34
你的代码是正确的。
但是getNumberOfIdsInUse()不是节点(或关系)的数量,而是分配的id的数量,它们之间可能有未使用的间隔。Id重用不会自动发生,但必须启用。
如果计数器仍然报告错误的数字,您可以尝试使用graphDb.getAllNodes()并递增计数器来计数节点吗?
https://stackoverflow.com/questions/8359735
复制相似问题