2014-10-29 52 views
1

我有,當我試圖在Java應用程序中執行一個暗號查詢一個奇怪的問題。 result.dumpToString() - 方法向我顯示正確的結果。 但是,當我試圖重複,最後一個節點總是缺少(對每個執行的查詢):的Neo4j - Java的:結果不完全

for (Map<String, Object> row : result) {  
    System.out.println(((Node) row.get("A"))); 
    System.out.println(((Node) row.get("A")).getProperty("name").toString());   
} 

第一輸出是正確的。我看到結果的所有節點。 在第二個輸出中,一個節點缺少,儘管我知道該節點具有「名稱」屬性。

有別人的想法? 謝謝

+0

你在調試器中調用了dumpToString()嗎?清空結果。它只能迭代一次。您在閱讀這些值時是否在交易中? – 2014-10-30 02:21:51

+0

可你也輸出:'的System.out.println(((節點)row.get( 「A」))hasProperty( 「名字」)); ' – 2014-10-30 02:23:40

+0

我單獨嘗試了dumpToString()以查明它是否返回所有節點。 System.out.println(((Node)ow.get(「A」))。hasProperty(「name」)) - >一個真實輸出仍然丟失。我開始認爲迭代器存在一些問題。 – MarryS 2014-10-30 10:17:45

回答

0

解決我的問題: 我正在執行的查詢,而無需在開始交易。 現在,它的工作。不過這是一個奇怪的行爲。

謝謝大家

2

如果你錯過了第二個輸出,很可能是該屬性的值是一個字符串,它是空白。此行:

System.out.println(((Node) row.get("A")).getProperty("name").toString()); 

如果存在空白屬性「名稱」,則根本不會打印任何內容(但換行)。

而且,你這樣做的方式是有點危險;請記住,一般節點可能會丟失,所以getProperty("name")可以返回null。這意味着,當你調用它的toString(),你可以用NullPointerException結束。這是更好地也許一次將這樣的:

row.get("A").getProperty("name", "missing").toString(); 

,將返回「失蹤」,如果缺少該屬性,或:

Object propValue = row.get("A").getProperty("name"); 
if(propValue != null) 
    System.out.println(propValue.toString()); 
else System.out.println("Missing name property"); 
+0

感謝您使用NullPointerException的提示。 – MarryS 2014-10-29 16:40:43

+0

不幸的是,name屬性不是空白字符串。我在服務器上檢查過它。正如已經提到的那樣,這不僅發生在一個查詢上,而且還發生在我想要執行的所有事件上 – MarryS 2014-10-29 16:46:08

+0

服務器上的值是什麼?更新你的問題,包括什麼樣的數據看起來像什麼,以及你的期望。你可以複製和過去*完全*你的程序輸出看起來像什麼? – FrobberOfBits 2014-10-29 16:54:59