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()
метод:
Цитировать:
ВНИМАНИЕ: Если вы укажете какие-либо столбцы для возврата, то любые поля чужой коллекции будут возвращены как пустые, если только их ForeignCollectionField.columnName также не находится в списке.