Oracle
 sql >> Base de données >  >> RDS >> Oracle

Limitation de la clause Hibernate + Oracle IN, comment la résoudre ?

Tout d'abord, le fait que vous deviez transmettre plus de 2000 identifiants (à en juger par votre 1er point) à une requête est une sonnette d'alarme en soi. Il existe peut-être une meilleure façon de résoudre le problème sous-jacent.

Vous pouvez utiliser l'approche n ° 2 et trier chaque liste, puis effectuer un tri par fusion dans l'application. Cela nécessitera du code supplémentaire, mais sera probablement (en supposant que la requête réelle est relativement rapide) plus performant que l'approche #3.

Pour #3, il y a 2 gros inconvénients à gérer les tables temporaires :

  • alors qu'Hibernate les prend en charge (regardez Table.sqlTemporaryTableCreateString méthode, il utilise un tas de méthodes de support dans le Dialect class), ils sont utilisés en interne et nécessiteront un codage supplémentaire de votre part pour être accessibles depuis l'application.
  • plus important encore, l'utilisation d'une table temporaire vous obligera à écrire votre requête en SQL natif (puisqu'elle ne sera pas mappée). Si vous utilisez l'API Criteria, vous devrez utiliser sqlRestriction avec une sous-requête.