Za prvé, skutečnost, že potřebujete předat více než 2000 id (soudě podle vašeho 1. bodu) dotazu, je sama o sobě varovným zvonkem. Možná existuje lepší způsob, jak vyřešit základní problém.
Můžete použít přístup č. 2 a seřadit každý seznam a poté provést mergesort v rámci aplikace. To bude vyžadovat další kód, ale pravděpodobně (za předpokladu, že skutečný dotaz je relativně rychlý) bude fungovat lépe než přístup #3.
Pro číslo 3 existují 2 velké nevýhody práce s dočasnými tabulkami:
- i když je Hibernate podporuje (podívejte se na
Table.sqlTemporaryTableCreateString
používá spoustu podpůrných metod vDialect
třídy), jsou používány interně a budou vyžadovat další kódování z vaší strany, aby byly přístupné z aplikace. - ještě důležitější je, že použití dočasné tabulky vás donutí napsat dotaz jako nativní SQL (protože nebude mapován). Pokud používáte Criteria API, budete muset použít
sqlRestriction
s dílčím dotazem.