För det första är det faktum att du behöver skicka mer än 2000 ID (att döma av din första poäng) till en fråga en varningsklocka i sig. Kanske finns det ett bättre sätt att lösa det underliggande problemet.
Du kan använda tillvägagångssätt #2 och sortera varje lista och sedan utföra sammanslagningssortering i applikationen. Det kommer att kräva extra kod, men kommer sannolikt (förutsatt att den faktiska frågan är relativt snabb) prestera bättre än tillvägagångssätt #3.
För #3 finns det två stora nackdelar med att hantera tillfälliga bord:
- medan Hibernate stöder dem (titta på
Table.sqlTemporaryTableCreateString
metoden använder den ett gäng stödmetoder iDialect
klass), används de internt och kommer att kräva ytterligare kodning från din sida för att vara åtkomliga från appen. - Ännu viktigare, att använda en temporär tabell kommer att tvinga dig att skriva din fråga som inbyggd SQL (eftersom den inte kommer att mappas). Om du använder Criteria API måste du använda
sqlRestriction
med en underfråga.