1

私は現在neo4j1.8.1を使用しています。いくつかのノードを取得するためにneo4jインデックスをクエリしているときに、NotInTransactionExceptionが発生します。

以下は、neo4jで実行している簡単なクエリです。

 if (graphDb.index().existsForNodes("NODEINDEX")) {
  IndexHits<Node> hits = graphDb.index().forNodes(NODEINDEX).query(query);
}

以下は、例外のスタックトレースです。

"message" : "Error fetching transaction for current thread",
"exception" : "NotInTransactionException",
"stacktrace" : [ "org.neo4j.kernel.impl.index.IndexConnectionBroker.getCurrentTransaction(IndexConnectionBroker.java:134)", "org.neo4j.kernel.impl.index.IndexConnectionBroker.acquireReadOnlyResourceConnection(IndexConnectionBroker.java:84)", "org.neo4j.index.impl.lucene.LuceneIndex.getReadOnlyConnection(LuceneIndex.java:105)", "org.neo4j.index.impl.lucene.LuceneIndex.query(LuceneIndex.java:245)", "org.neo4j.index.impl.lucene.LuceneIndex.query(LuceneIndex.java:227)", "org.neo4j.index.impl.lucene.LuceneIndex.query(LuceneIndex.java:238)", "com.uprr.netcontrol.starmap.neo4j.plugins.aggregate_node_status.NodeStatusHelper.getGraphNodes(NodeStatusHelper.java:39)", 

Neo4japiで次のものを見つけました。

 private Transaction getCurrentTransaction() throws NotInTransactionException
{
    try
    {
        return transactionManager.getTransaction();
    }
    catch ( SystemException se )
    {
        throw new NotInTransactionException(
                "Error fetching transaction for current thread", se );
    }
}

neo4jインデックスをクエリするためのトランザクションを明示的に開始する必要がありますか?
何かご意見は?
ありがとう

4

2 に答える 2

1

理論は次のとおりです。これがここに貼り付けられたコードの問題であるかどうかはわかりませんが、次の点を確認してください。

if(graphDb.index()。existsForNodes( "NODEINDEX"))

「NODEINDEX」という名前のインデックスをチェックしますが、実際のクエリは

graphDb.index()。forNodes(NODEINDEX).query(query);

定数NODEINDEXにあるものは何でも名前が付けられたインデックスをチェックします。これら2つはおそらく同じではないため、そのインデックスを作成しようとしますが、トランザクションに参加していないために失敗します。

于 2013-03-22T07:58:40.443 に答える
0

既存の適切なインデックスがない場合は、それを返す前に作成すると思います。この操作はトランザクションでラップする必要があります。

于 2013-10-29T22:17:44.390 に答える