現在、Neo4j 2.0.0 M3 を試していますが、奇妙な動作が見られます。私の単体テストでは、すべてが期待どおりに( を使用してnewImpermanentDatabase
) 動作しますが、実際にはから結果が得られませんgraphDatabaseService.findNodesByLabelAndProperty
。
問題のコードは次のとおりです。
ResourceIterator<Node> iterator = graphDB
.findNodesByLabelAndProperty(Labels.User, "EMAIL_ADDRESS", emailAddress)
.iterator();
try {
if (iterator.hasNext()) { // => returns false**
return iterator.next();
}
} finally {
iterator.close();
}
return null;
これは結果を返しません。ただし、次のコードを実行すると、ノードがそこにあることがわかり (MATCH!!!!!!!!! が出力されます)、スキーマを介してインデックスもセットアップされます (ただし、API を読むと、これは必須ではありませんが、パフォーマンスにとって重要です):
ResourceIterator<Node> iterator1 = GlobalGraphOperations.at(graphDB).getAllNodesWithLabel(Labels.User).iterator();
while (iterator1.hasNext()) {
Node result = iterator1.next();
UserDao.printoutNode(emailAddress, result);
}
そして UserDao.printoutNode
public static void printoutNode(String emailAddress, Node next) {
System.out.print(next);
ResourceIterator<Label> iterator1 = next.getLabels().iterator();
System.out.print("(");
while (iterator1.hasNext()) {
System.out.print(iterator1.next().name());
}
System.out.print("): ");
for(String key : next.getPropertyKeys()) {
System.out.print(key + ": " + next.getProperty(key).toString() + "; ");
if(emailAddress.equals( next.getProperty(key).toString())) {
System.out.print("MATCH!!!!!!!!!");
}
}
System.out.println();
}
私はすでにコードをデバッグしており、すでにわかっていることは、 を介して に渡しInternalAbstractGraphDatabase.map2Nodes
、DelegatingIndexProxy.getDelegate
最終的にIndexReader.Empty
を返すクラスにIteratorUtil.EMPTY_ITERATOR
なることfalse
です。iterator.hasNext()
私が間違っていることは何ですか?