ForeignCollection не загружается с помощью Query Builder - PullRequest
1 голос
/ 26 октября 2011

Я попытался использовать 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 Ответ

2 голосов
/ 26 октября 2011

Интересно. Проблема в том, что вы ограничили столбцы "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 также не находится в списке.

...