Oracle
 sql >> Database >  >> RDS >> Oracle

Limitazione della clausola Hibernate + Oracle IN, come risolverla?

Innanzitutto, il fatto che devi passare più di 2000 ID (a giudicare dal tuo primo punto) a una query è un campanello d'allarme in sé e per sé. Forse c'è un modo migliore per risolvere il problema di fondo.

È possibile utilizzare l'approccio n. 2 e ordinare ogni elenco, quindi eseguire il mergesort all'interno dell'applicazione. Ciò richiederà codice aggiuntivo, ma probabilmente (supponendo che la query effettiva sia relativamente veloce) avrà prestazioni migliori rispetto all'approccio n. 3.

Per il numero 3, ci sono 2 grandi svantaggi nell'affrontare i tavoli temporanei:

  • mentre Hibernate li supporta (guarda Table.sqlTemporaryTableCreateString metodo, utilizza una serie di metodi di supporto nel Dialect class), vengono utilizzati internamente e richiedono una codifica aggiuntiva da parte tua per essere accessibili dall'app.
  • ancora più importante, l'utilizzo di una tabella temporanea ti costringerà a scrivere la tua query come SQL nativo (poiché non verrà mappata). Se stai usando Criteria API dovrai usare sqlRestriction con una sottoquery.