2014-10-29 5 views
1

У меня возникла странная проблема, когда я пытаюсь выполнить запрос cypher в 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()? который опустошает результат. Его можно повторить только один раз. Вы совершаете транзакцию, когда читаете эти значения? –

+0

Вы также можете вывести: 'System.out.println (((Node) row.get (« A »)). HasProperty (« name »)); ' –

+0

Я попытался выполнить dumpToString() отдельно, чтобы узнать, вернет ли он все узлы или нет. System.out.println (((Node) ow.get («A»)). HasProperty («name»)) -> Один истинный вывод все еще отсутствует. Я начинаю думать, что есть проблема с итератором. – MarryS

ответ

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

+0

К сожалению, свойство name не является пустой строкой. Я проверил его на сервере. Как уже упоминалось, это происходит не только для одного запроса, но и для всех, что я хочу выполнить. – MarryS

+0

Какова ценность на сервере? Обновите свой вопрос, чтобы указать, какие образцы данных выглядят и что вы ожидаете. Можете ли вы скопировать и пропустить * точно, как выглядит ваша программа? – FrobberOfBits

Смежные вопросы