Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Limitação da cláusula Hibernate + Oracle IN, como resolver?


Em primeiro lugar, o fato de você precisar passar mais de 2.000 ids (a julgar pelo seu primeiro ponto) para uma consulta é um aviso por si só. Talvez haja uma maneira melhor de resolver o problema subjacente.

Você pode usar a abordagem nº 2 e classificar cada lista e, em seguida, executar mergesort dentro do aplicativo. Isso exigirá código extra, mas provavelmente (supondo que a consulta real seja relativamente rápida) tenha um desempenho melhor do que a abordagem nº 3.

Para #3, existem 2 grandes desvantagens em lidar com tabelas temporárias:
  • enquanto o Hibernate os suporta (veja Table.sqlTemporaryTableCreateString método, ele usa vários métodos de suporte no Dialect class), eles são usados ​​internamente e exigirão codificação adicional de sua parte para serem acessados ​​no aplicativo.
  • mais importante, usar uma tabela temporária forçará você a escrever sua consulta como SQL nativo (já que ela não será mapeada). Se você estiver usando a API Criteria, precisará usar sqlRestriction com uma subconsulta.