1

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");
    }
}

上記のコードでは「メンバーなし」と出力されますが、チームの他のデータ(IDと名前)には完全にアクセスできます。コレクションでeagerをtrueとfalseに設定しようとしましたが、どちらも機能しませんでした。さらに調べてみると、メンバー配列が初期化されていない (null) ことがわかりました。これはバグですか、それともライブラリの使い方が間違っていますか? ForeigCollection を手動で取得する方法はありますか?

返信ありがとうございます。

4

1 に答える 1

2

面白い。"id"問題は、列をとに制限したことです"name"したがって、 ORMLiteはフィールドを作成ForeignCollectionしません。

これは、バージョン 4.30 で修正されたバグです。ForeignCollectionで列名を指定する機能を追加しましたselectColumns()。これに関するバグ修正は次のとおりです。

https://sourceforge.net/tracker/?func=detail&aid=3428751&group_id=297653&aid=1255989

QueryBuilderフィールドを「選択」するようにコードを変更する必要がありmembersます。

...selectColumns("id", "name", "members")...

selectColumns()メソッドのドキュメントは次のとおりです。

http://ormlite.com/docs/select-columns

引用するには:

警告:返す列を指定すると、ForeignCollectionField.columnName もリストにない限り、すべての外部コレクション フィールドは null として返されます。

于 2011-10-26T12:39:02.530 に答える