0

ドキュメントに従おうとすると、Neo4j1.8の次のコードになりました。

graphDB = new GraphDatabaseFactory()
            .newEmbeddedDatabaseBuilder( BASE_FOLDER + NEO4J_PATH )
            .newGraphDatabase();

registerShutdownHook();

//Check if there are any indexes
System.out.println(Arrays.toString(graphDB.index().nodeIndexNames()));
Index<Node> testIndex = graphDB.index().forNodes("test");

Transaction tx = graphDB.beginTx();
try {
    String nameKey = "name";
    String nameValue = "Gevorg";

    //The following 3 lines will be commented out 
    //when I run the program the second time
    Node me = graphDB.createNode();
    me.setProperty(nameKey, nameValue);
    testIndex.add(me, nameKey, nameValue);

    Node meAgain = testIndex.get(nameKey, nameValue).getSingle();
    System.out.println(meAgain.getProperty(nameKey));

} finally {
    tx.finish();
}

これにより、期待どおりに次のように出力されます。

[] //There is no index at the very beginning
Gevorg

プログラムが終了した後、ノード/インデックスの作成についてコメントし、プログラムを再度実行してNullPointerException(meAgainはnull)をヒットしました。[test]プログラムが最初に印刷するがNode meAgain = testIndex.get(nameKey, nameValue).getSingle();、ノードの取得に失敗するため、インデックスは正しく取得されます。トランザクションを使用する場合と使用しない場合の両方を試しました。私は何が間違っているのですか?

4

1 に答える 1

2

呼び出す前に、Tx を成功としてマークする必要がありますtx.finish

tx.success()

HTH

/ピーター

于 2012-10-05T04:32:12.780 に答える