sql >> Base de Datos >  >> RDS >> Oracle

Limitación de la cláusula IN de Hibernate + Oracle, ¿cómo solucionarlo?

En primer lugar, el hecho de que necesite pasar más de 2000 ID (a juzgar por su primer punto) a una consulta es una campana de advertencia en sí misma. Tal vez haya una mejor manera de resolver el problema subyacente.

Puede usar el enfoque n. ° 2 y ordenar cada lista, luego realizar mergesort dentro de la aplicación. Eso requerirá código adicional, pero probablemente (suponiendo que la consulta real sea relativamente rápida) funcionará mejor que el enfoque n.° 3.

Para el n.º 3, hay 2 grandes inconvenientes al tratar con tablas temporales:

  • mientras que Hibernate los admite (consulte Table.sqlTemporaryTableCreateString método, utiliza un montón de métodos de apoyo en el Dialect clase), se usan internamente y requerirán codificación adicional de su parte para que sean accesibles desde la aplicación.
  • más importante aún, el uso de una tabla temporal lo obligará a escribir su consulta como SQL nativo (ya que no se asignará). Si está utilizando Criteria API, deberá usar sqlRestriction con una subconsulta.