Първо, фактът, че трябва да предадете повече от 2000 идентификатора (съдейки по вашата 1-ва точка) към заявка, е предупредителен звънец сам по себе си. Може би има по-добър начин за решаване на основния проблем.
Можете да използвате подход №2 и да сортирате всеки списък, след което да извършите mergesort в рамките на приложението. Това ще изисква допълнителен код, но вероятно (ако приемем, че действителната заявка е относително бърза) ще се представи по-добре от подход №3.
За #3 има 2 големи недостатъка при работа с временни таблици:
- докато Hibernate ги поддържа (вижте
Table.sqlTemporaryTableCreateStringметод, той използва куп поддържащи методи вDialectклас), те се използват вътрешно и ще изискват допълнително кодиране от ваша страна, за да бъдат достъпни от приложението. - по-важното е, че използването на временна таблица ще ви принуди да напишете вашата заявка като собствен SQL (тъй като няма да бъде картографирана). Ако използвате Criteria API, ще трябва да използвате
sqlRestrictionс подзаявка.