При запросе с помощью JDO я получаю дополнительные нулевые объекты в наборе результатов.
Запрос должен возвращать 25 строк.Я проверил это, запустив его прямо в консоли БД.Когда я запускаю:
List<MyClass> result = (List<MyClass>)query.execute();
Я проверяю размер как 25 с .size()
.Проблема, с которой я сталкиваюсь, заключается в том, что во время итерации результата проверка .hasNext()
продолжается в последних 25 строках.Даже при том, что я правильно использую .next()
, чтобы увеличить его.
Когда я пошел к отладке, я установил точки останова на hasNext()
и next()
.Как вы можете видеть в связанном снимке экрана, результат имеет размер 25, но в ArrayList есть 33 объекта!Развертывание этого узла показывает все ожидаемые результаты, плюс 8 пустых записей в конце.Я даже очистил таблицу от всех, кроме 25 строк, и она все равно вернула 33 объекта.
Я предполагаю, что это должно быть причиной того, что мой итератор продолжает работать, и я получаю исключение NullPointerException.
Отладка Screencapture <- Извините, недостаточно репов для публикации inline </p>
Поиск в Google ничего особенного не дал ... Единственное, что меня удивило, есть ли какая-то проблема при восстановлении объектов и есть остатки в конце.Это только примитивы и перечисления в классе, и они находятся в группе извлечения по умолчанию.
Я ценю ваши предложения.
РЕДАКТИРОВАТЬ: Добавлен код
tx.begin();
Query q = pm.newQuery("SELECT FROM " + Permission.class.getName() +
" WHERE userId == " + this.userId);
List<Permission> result = (List<Permission>)q.execute();
if (!(result.isEmpty()))
{
//System.out.println(result.size());
Iterator<Permission> iter = result.iterator();
while (iter.hasNext()) // Exception throws from here after 25th
{
Permission p = iter.next();
System.out.println(p.getPermissionId());
}
}
tx.commit();
Консоль показывает следующее:
25 <--// result.size();
1150
1151
1152
...
1173
1174 <--// 25th row
Exception in thread "main" java.lang.NullPointerException <--//(iter.hasNext())