わかりました、Hibernate を介してオブジェクトの大きなリストにマップする List メンバーを持つエンティティ クラスがあります。クエリ時にリスト全体を取得する必要はありません。これが適用されるオブジェクトの合計サイズのみが必要です。
- List は@Whereアノテーションを使用して、要素のサブセットのみを選択します。
- サイズが非常に大きいため、リストは@LazyCollection(LazyCollectionOption.EXTRA)としてマークされてい ます
- マッピングは、リンク テーブルを使用して行われます
- リストには次のようなマッピングがあります。
リストの@JoinTableは、テーブル 2 で結合を使用し、テーブル 3 で逆結合を使用します。私は SQL にあまり精通していないため、生成された SQL が何であるかは完全にはわかりません。
とにかく、 @Where句には、 'STATUS = ACTIVE'や'LETTER = 'A'などの他のものなど、いくつかの制限があります。例が示すように、次のような呼び出しを行うと:
リスト項目 = Lists.getItems(); アイテム.サイズ(); // これにより、@Where 句の制限により 1 が返されます
上記は、@Where 句の制限を使用して、表 3 の正しい項目を項目に入力します。リスト全体を取得せずに最初に試したのは次のとおりです。
int listSize = Lists.getItems().size(); // 結果は 3 で、@Where 句は適用されません
私はそれを調査し、Hibernate でこの問題が修正されたとは思わないことを発見しました: Hibernate Jira
だから、私の質問は、これを行うための最良の方法は何ですか? 私はまだ SQL や HQL に習熟していません。私は結合やその他のデータベース用語にあまり詳しくないので、何かサポートがあれば助かります。
ありがとう!