sql >> Database >  >> RDS >> Oracle

Hibernate + Oracle IN-clausulebeperking, hoe dit op te lossen?

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


  1. PostgreSQL-combinaties in tegenstelling tot permutaties

  2. Tabelgeschiedenistrigger in SQL Server?

  3. Hoe een primaire sleutel in SQL te verwijderen

  4. Hoe gebruik je een variabele in de opgestelde verklaring voor SQL-query?