6

ドメインオブジェクトBarと1:nの関係にあるドメインオブジェクトFooがあります。

いくつかの基準に一致するすべてのfooを取得する必要がある2つの主要なユースケースがあります。ケースAの場合、私は各fooに接続されているバーを気にしますが、ケースBの場合は気にしません。バーが非常に多いため、常にバーをロードすることは、ケースAのパフォーマンスには適していません。同様に、バーを熱心にロードしないと、ケースBでn +1のなだれが発生します。したがって、どちらも現実を@Lazyとしてタグ付けしません。タグ付けしないことも正しい選択です。

さて、私の質問:クエリ時にextbase永続層に怠惰か熱心かを伝えることは可能ですか?はいの場合、どのように?いいえの場合、Extbaseにn + 1の問題を回避する別の方法がありますか(つまり、必要なすべてのバーをロードしてから、fooを反復処理するときにキャッシュが機能することを期待します)?

もちろん、私の最後の手段は、遅延読み込みを使用してfooを読み込み、2番目のクエリでバーを手動で読み込み、次にリレーションを手動で設定することです。

助言がありますか?

4

2 に答える 2

2

私はここ数ヶ月、Extbaseをいじって内部を調べてきましたが、結果は次のとおりです。それは不可能です。

私が望む方法ではありませんが、これでこの質問は終了すると思います。

実際には、さらに悪いことに、積極的な読み込みはまったく実装されていません。ドキュメントによると、リレーションの積極的な読み込みを設定する@eagerタグは無視されます。

于 2012-09-16T16:36:45.087 に答える
0

怠惰なままにして、必要に応じて配列に変換するのはどうですか?(foo-> bar-> toArray())

于 2012-10-04T14:15:23.527 に答える