まず、2000を超えるID(最初のポイントで判断)をクエリに渡す必要があるという事実は、それ自体が警告ベルです。おそらく、根本的な問題を解決するためのより良い方法があります。
アプローチ#2を使用して各リストを並べ替えてから、アプリケーション内でマージソートを実行できます。これには追加のコードが必要になりますが、(実際のクエリが比較的高速であると仮定して)アプローチ#3よりもパフォーマンスが向上する可能性があります。
#3の場合、一時テーブルを処理することには2つの大きな欠点があります。
- Hibernateはそれらをサポートしますが(
Table.sqlTemporaryTableCreateString
を参照してください) メソッド、それはDialect
のサポートメソッドの束を使用します クラス)、それらは内部で使用され、アプリからアクセスできるようにするには、追加のコーディングが必要になります。 - さらに重要なことに、一時テーブルを使用すると、クエリをネイティブSQLとして記述する必要があります(マップされないため)。 Criteria APIを使用している場合は、
sqlRestriction
を使用する必要があります サブクエリを使用します。