7

次のオブジェクトがあるとします。

public class MyOwnList {

    @DatabaseField(id= true)
    protected int id;

    @ForeignCollectionField(eager = false)
    protected Collection<Item> items;
}

itemsデータベースからリストオブジェクトをロードすると、遅延としてマークされているため、ロードされません。それがまさに私が欲しいものです!!

問題は、にアクセスitemsするたびに、ORMLite が SQL クエリを作成してコレクションを取得することです。ORMLite のロギングを有効にした後にのみ発見されました...

なぜそれをするのですか?その正当な理由はありますか?

コレクションにアクセスするたびにではなく、一度だけコレクションを遅延ロードできる方法はありますか? 熱心と怠惰の間の何か?

4

1 に答える 1

7

問題は、アイテムにアクセスするたびに、ORMLite が SQL クエリを作成してコレクションを取得することです。

だから最初はこれが分からなかった。あなたが求めているのは、ORMLiteが最初に遅延ロードした後にアイテムのコレクションをキャッシュすることです。これをデフォルトとして使用する場合の問題は、ORMLite があなたのコレクションの大きさがわからないことitemsです。遅延コレクションが使用される理由の 1 つは、大きなコレクションを処理することです。ORMLite がすべての遅延コレクションをメモリ内に保持すると、メモリがいっぱいになる可能性があります。

lazyCached = true怠惰と熱心のハイブリッドを行うようなものを TODO リストに追加します。良い提案です。

于 2012-07-24T18:37:51.237 に答える