JDO-запрос возвращает лишние нулевые объекты в результате - PullRequest
0 голосов
/ 23 февраля 2012

При запросе с помощью 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())
...