Oracle connaît la limitation à 1000 éléments dans le où une clause (..) code>. Cette limitation existe-t-elle aussi lors de l'utilisation de Hibernate en conjonces avec Oracle? P>
4 Réponses :
Oui, car Hibernate appellera Oracle à un moment donné, la limite est la plus faible des limites de Hibernate et Oracle P>
hibernate ne fait rien de spécial avec des données pour un dans - il suffit de le transmettre à la base de données p>
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. P>
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 code>. P>
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é.
Il semble être un bug dans hibernate: p>
http://opensource.atlassian.com/projects/ibernate/browse / HHH-1123 P>
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 (...).
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>
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>
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.