我正在尝试使用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()
任何想法都是我做错了什么?
答案 0 :(得分:1)
找到它:
我只在类路径中包含了neo4j-kernel:2.0.0-M03
。我添加neo4j-cypher:2.0.0-M03
的那一刻一切运作良好。
希望这个答案有助于为其他用户节省一些时间。
@ Neo4j:如果抛出异常而不是只返回任何内容,那就太好了。
@Ricardo:我想,但我不被允许,因为我的声誉不如新的SO用户好。