1

我在一个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");
    }
}

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

感谢您的回复!

4

1 回答 1

2

有趣的。问题是您已将列限制为"id""name"因此, ORMLite不会为您创建ForeignCollection字段。

这是 4.30 版中修复的错误。我们添加了ForeignCollectionselectColumns(). 这是围绕此的错误修复:

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

去引用:

警告:如果您指定要返回的任何列,则任何外部集合字段都将返回为 null,除非它们的 ForeignCollectionField.columnName 也在列表中。

于 2011-10-26T12:39:02.530 回答