neo4j:java错误:找不到NodeImpl#0的属性

时间:2013-03-14 09:37:52

标签: java runtime-error neo4j node-neo4j

我正在用java编写neo4j演示代码。以下是代码的一部分,我正在创建节点,索引它们并打印它们的属性。

String NODE_KEY = "UserID";
String NODE_PROPERTIES = "UserProperties";

createAndIndexUser(String userID){
    Node node = graphDB.createNode();
    node.setProperty(NODE_KEY, nodeID);
    neo4jGraph.nodeIndex.add(node, NODE_KEY, userID);
    return node;
}

for(int i=0 ; i<100 ; i++){
    String userID = "userID_"+i;
    Node node = createAndIndexUser(userID);
    node.setProperty(NODE_PROPERTIES, strNodeProperties);
}

Iterable<Node> allNodes = GlobalGraphOperations.at(graphDB).getAllNodes();

for(Node n: allNodes){
    System.out.println("n.getPropertyKeys: "+n.getPropertyKeys());
    System.out.println(n.getProperty(NODE_KEY));
}

当我执行此代码时,第一个println的输出是:

n.getPropertyKeys: []

而对于第二次打印我遇到错误:

Exception in thread "main" org.neo4j.graphdb.NotFoundException: 'UserID' property not found for NodeImpl#0.

我在哪里以及我做错了什么?为什么不在n.getProperty(NODE_KEY)上打印所有属性键?

是否有其他方法可以获取所有节点并打印其属性?

2 个答案:

答案 0 :(得分:5)

除了您在createAndIndexUser中添加的节点外,图表中还包含哪些其他节点?请记住,neo4j图总是有一个ID为0的虚拟节点。尝试将循环修改为:

for(Node n: allNodes){
    System.out.println("n.getPropertyKeys: "+n.getPropertyKeys());
    if(n.hasProperty(NODE_KEY))
        System.out.println(n.getProperty(NODE_KEY));
    else
        System.out.println("Node " + n.getId() + " does not contain property " + NODE_KEY);
}

事实上,如果你真的想确定,你可以保留上面创建的节点列表,并根据你从getAllNodes()得到的节点进行检查。

答案 1 :(得分:0)

它是参考节点,如果您不使用它,可以删除它。

n.getProperty(NODE_KEY,null)也非常实用。