我在android应用程序中尝试了usign OrmLite,并遇到了问题:
我在一个对象上创建了一个外部集合,并为其分配了一些对象。我可以在DAO上使用queryForAll()方法来查询对象,并按预期返回它们:
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");
}
}
上面的代码输出“没有成员”,但是我可以完美地访问团队的其他数据(ID和名称)。我尝试将集合中的渴望值设置为true和false,但均无效。我进一步调查发现,成员数组未初始化(空)。这是一个错误,还是我错误地使用了库?有没有办法手动获取ForeigCollection?
多谢您的回覆!
最佳答案
有趣。问题是您将列限制为"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也在列表中,否则任何外部集合字段都将返回为null。
关于android - ForeignCollection未随查询生成器一起加载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7900088/