sql >> Databasteknik >  >> RDS >> Oracle

Hibernate + Oracle IN-klausulbegränsning, hur löser man det?

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 i Dialect 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.


  1. FIND_IN_SET() vs IN()

  2. Guide till designdatabas för lagerhanteringssystem i MySQL

  3. MyISAM- och InnoDB-tabeller i en databas

  4. Kan jag använda frågespråk i viloläge för enheter som inte är mappade till en tabell?