当我在java应用程序中尝试执行cypher查询时,我遇到了一个奇怪的问题。 result.dumpToString() - 方法显示正确的结果。 但是当我尝试迭代时,最后一个节点总是丢失(对于每个执行的查询):
for (Map<String, Object> row : result) {
System.out.println(((Node) row.get("A")));
System.out.println(((Node) row.get("A")).getProperty("name").toString());
}
第一个输出是正确的。我看到了结果的所有节点。 在第二个输出中,缺少一个节点,虽然我知道该节点有一个“名称” - 属性。
有人有想法吗? 谢谢
答案 0 :(得分:2)
如果您错过了第二个输出,那么该属性的值可能是一个空白的字符串。这一行:
System.out.println(((Node) row.get("A")).getProperty("name").toString());
存在属性&#34; name&#34;如果是空白,则根本不打印(但换行)。
另外,你这样做的方式有点危险;请记住,通常节点可能会丢失,因此getProperty("name")
可以返回null。这意味着当您在其上调用toString()
时,您最终会得到NullPointerException
。或许写下这个更好:
row.get("A").getProperty("name", "missing").toString();
那将会回归&#34;失踪&#34;如果财产遗失,或者:
Object propValue = row.get("A").getProperty("name");
if(propValue != null)
System.out.println(propValue.toString());
else System.out.println("Missing name property");
答案 1 :(得分:0)
解决了我的问题: 我在没有开始事务的情况下执行查询。 现在它有效。然而,这是一种奇怪的行为。
谢谢大家