IN句(See here)のデータベースによる制限を克服するために、すべてのクエリ(IN句付き)をバッチする戦略を探しています。JPA 2.0:IN句を使用したクエリのバッチ
私は通常、サイズが100000から305000のリストを取得しています。これは、取り組むことが非常に重要になっています。
これまで2つの戦略を試しました。
戦略1:
エンティティひいては(我々が2.0ベンダーに依存JPAとその場で一時テーブルを作成することができますか?)、そのような値を保持する一つのカラムを持つテーブルを作成し、使用最終的に一時テーブルをクリーンアップする前に、元のクエリへのサブクエリとして一時テーブルからのデータ。
利点:パフォーマンスの高いクエリ。本当に早く、私が言及した数字を認めなければならない。それはほとんどが1分以内だった。
考えられる欠点:これまでの私の場合、実際には永久的な一時テーブルの使用。
戦略2:
所与の入力リストの各バッチは、クエリを実行し、結果を蓄積するためのバッチ・サイズを計算します。
利点:一時テーブルがありません。同じトランザクション内のどのスレッドでも簡単です。
短所:大きな欠点は、すべてのバッチを実行するのにかかる時間です。上記の数字については、これは現時点では許容できないレベルです。 5〜15分かかります!
私はJPAの専門家からのフィードバック、提案または改善を感謝します。
ありがとうございました。
Aaronを投稿してくれてありがとうございました。あなたの解決策はよく見えます。純粋なSQLのものをJPAの同等のものに変換する必要があります:) – JProgrammer