Ten eerste is het feit dat je meer dan 2000 ID's moet doorgeven (te oordelen naar je eerste punt) een waarschuwing op zich. Misschien is er een betere manier om het onderliggende probleem op te lossen.
U kunt benadering #2 gebruiken en elke lijst sorteren, en vervolgens mergesort uitvoeren binnen de toepassing. Dat vereist extra code, maar zal waarschijnlijk (ervan uitgaande dat de eigenlijke zoekopdracht relatief snel is) beter presteren dan benadering #3.
Voor #3 zijn er 2 grote nadelen aan het omgaan met tijdelijke tafels:
- terwijl Hibernate ze wel ondersteunt (kijk naar
Table.sqlTemporaryTableCreateString
methode, gebruikt het een aantal ondersteunende methoden in hetDialect
class), ze worden intern gebruikt en vereisen extra codering van uw kant om toegankelijk te zijn vanuit de app. - Wat nog belangrijker is, is dat het gebruik van een tijdelijke tabel je dwingt om je query als native SQL te schrijven (omdat deze niet wordt toegewezen). Als u de Criteria API gebruikt, moet u
sqlRestriction
. gebruiken met een subquery.