7
votes

Oracle où dans la limitation de 1000 / hibernation

Oracle connaît la limitation à 1000 éléments dans le où une clause (..) . Cette limitation existe-t-elle aussi lors de l'utilisation de Hibernate en conjonces avec Oracle?


0 commentaires

4 Réponses :


2
votes

Oui, car Hibernate appellera Oracle à un moment donné, la limite est la plus faible des limites de Hibernate et Oracle

hibernate ne fait rien de spécial avec des données pour un dans - il suffit de le transmettre à la base de données


0 commentaires

4
votes

Cette limitation de la base de données existe toujours avec hibernate. Si vous devez vraiment avoir plus de 1000 articles dans votre clause dans votre clause, vous devrez diviser votre liste dans le code et exécuter la requête pour chaque bloc de 1000 touches, puis appendez les résultats des résultats ensemble.

Notez que ce piratage tombe en panne si votre requête doit trier ou attribuer autrement les résultats de la requête, car le jeu complet des résultats ne sera connu que dans le code. Dans ce cas, vous préférez trouver un autre moyen d'écrire la requête qui ne nécessite pas de clause dans .


3 commentaires

Une solution alternative serait de coller les valeurs de 1000+ dans une table temporaire globale dans la base de données et de rejoindre les deux tables. Les bases de données sont très bonnes à la table de jonction :)


Laissez exactement la base de données faire le travail! La scission est une solution bien connue, mais celle qui devrait indiquer que vous devez repenser votre approche.


Une autre alternative est de faire ou sur l'élément de 1000 en groupes. De cette façon, vous pouvez "commander par" sur le omnipré.



1
votes

0 commentaires

3
votes

Nous avions le même problème et nous l'avons résolu en le séparant dans des packages 100 actifs de la clause

select * from mytable where id in (...) or id in (...).
  • Assurez-vous que vous utilisez des variables de liaison li>
  • Assurez-vous que la requête a toujours l'air identique. Ceci est fait en remplissant les clauses dans les clauses de -1 jusqu'à ce que vous ayez 100 éléments de celui-ci li>
  • Essayez d'utiliser toujours le même nombre de minuscules dans (...) de manière à ce que la requête ait toujours la pareille li> ul>

    Pourquoi vous voulez les points ci-dessus? C'est pour que l'optimiseur de requête puisse réutiliser le plan de requête. P>

    Optimisation supplémentaire: P>

    • Au lieu d'utiliser -1, vous pouvez simplement utiliser la dernière valeur véritable à nouveau. C'est même un peu mieux. Li> ul>

      Exemple: In (1, 2, 3, 4, 4, ..., 4) P>

      NOTE AUSSI: Nous avons testé avec divers nombres fixes d'éléments dans la clause de la clause et observé une diminution des performances pour beaucoup de 100 éléments. P> p>


1 commentaires

PS: Si l'instruction SQL qui renvoie les valeurs dans la clause in dans la clause est connue, vous pouvez également vouloir envisager de remplacer votre dans une déclaration existante.