ForeignCollection未加载Query Builder

时间:2011-10-26 08:03:04

标签: android ormlite query-builder foreign-collection

我尝试在Android应用程序中使用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");
    }
}

上面的代码输出“No members”,但我可以完美地访问团队的其他数据(id和name)。我试着在集合上设置真假,但都没有效果。进一步调查,我发现,成员数组没有初始化(null)。这是一个错误,还是我错误地使用了库?有没有办法手动获取ForeigCollection?

感谢您的回复!

1 个答案:

答案 0 :(得分:2)

有趣。问题是您已将列限制为"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。