ForeignCollection не загружается с помощью Query Builder

Я попытался использовать OrmLite в приложении для Android, и столкнулся с проблемой:

Я создал чужую коллекцию для объекта и назначил ей несколько объектов. Я могу использовать метод queryForAll() в DAO для запроса объектов, и он возвращает их, как и ожидалось:

allTeams = getHelper().getTeamDao().queryForAll();
for(ScrumTeam team : allTeams) {
    if(team.getMembers() == null || team.getMembers().size() == 0) {
        log("No Members");
    } else {
        log(team.getMembers().size()+" Members");
    }
}

Это работает, как и ожидалось, печатая "2 участника" или "3 участника" в командах, представляя правильные данные.

Очевидно, я хотел отсортировать данные, и для этого я нашел метод queryBuilder:

allTeams = getHelper().getTeamDao().queryBuilder().selectColumns("id", "name").orderBy("name", true).query();
for(ScrumTeam team : allTeams) {
    if(team.getMembers() == null || team.getMembers().size() == 0) {
        log("No Members");
    } else {
        log(team.getMembers().size()+" Members");
    }
}

Приведенный выше код выводит "Нет участников", но я могу получить доступ к другим данным команды (идентификатор и имя) отлично. Я попытался установить для коллекции значение true и false, но ни одна из них не сработала. Исследуя далее, я обнаружил, что массив members не инициализирован (null). Это ошибка или я использую библиотеку неправильно? Есть ли способ получить коллекцию ForeigCollection вручную?

Спасибо за ваши ответы!

1 ответ

Решение

Интересно. Проблема в том, что вы ограничили столбцы "id" а также "name", Поэтому ORMLite не создает ForeignCollection поля для вас.

Эта ошибка была исправлена ​​в версии 4.30. Мы добавили возможность указать ForeignCollection имя столбца в selectColumns(), Вот исправление ошибки вокруг этого:

https://sourceforge.net/tracker/?func=detail&aid=3428751&group_id=297653&atid=1255989

Вы должны изменить свой QueryBuilder код также "выбрать" members поле.

...selectColumns("id", "name", "members")...

Вот документы для selectColumns() метод:

http://ormlite.com/docs/select-columns

Цитировать:

ВНИМАНИЕ: Если вы укажете какие-либо столбцы для возврата, то любые поля чужой коллекции будут возвращены как пустые, если только их ForeignCollectionField.columnName также не находится в списке.

Другие вопросы по тегам