1

エンティティのリストを返すクエリがあります。このリストをキャッシュに入れようとすると、おなじみのjava.lang.IllegalArgumentException.

ただし...リスト内のすべてのアイテムを問題なくキャッシュに入れることができます。新しい を作成LinkedListし、取得したリストから for サイクルを使用してこの新しいリストにエンティティをコピーし、それをキャッシュに入れようとしても機能します。

List<MyEntity> a = (List<MyEntity>) q.execute(getKey());

List<MyEntity> b = new LinkedList<MyEntity>();
for (MyEntity e : a)
        b.add(e);

cache.put(key, b); // this works
cache.put(key, a); // this doesn't

それで、私は何が欠けていますか?他のクエリのキャッシュは機能しますが、なぜこれが違うのかわかりません。

4

1 に答える 1

2

List動的プロキシであるため、JDO クエリによって返される可能性が最も高いのはシリアライズ可能ではありません。

コピーを作成するには、単に使用できます

List<MyEntity> b = new ArrayList<MyEntity>(a);

注: これは のa要素から新しいリストをb作成しますが、要素のコピーは作成しないため、かなり軽量です。

于 2012-08-17T14:38:22.783 に答える