Comment setMaxResults(N) en mode veille prolongée de travail?
Je suis à l'aide de MS SQL server 2008 avec mise en veille prolongée. la question que je me pose est de savoir comment Hibernate implémente setMaxResults
Prendre scénario simple.
Si j'ai une requête qui renvoie 100 lignes et si je passe de 1 à setMaxResults
, cela affectera le résultat renvoyé de SQL server lui-même(comme si l'exécution d'un select top 1
déclaration) ou ne Hibernate obtenir tous les résultats de la première (toutes les 100 lignes dans ce cas) et de choisir le haut l'un lui-même?
Raison que je demande, c'est qu'il aurait un énorme problème de performances lorsque le nombre de lignes commence à se développer.
Merci.
OriginalL'auteur user624558 | 2013-02-28
Vous devez vous connecter pour publier un commentaire.
Hibernate va générer une limite de type requête, pour tous les dialectes qui prend en charge la limite de la requête. Comme le SQLServerDialect prend en charge ce (voir
org.hibernate.dialect.SQLServerDialect.supportsLimit()
, et.getLimitString()
), vous obtiendrez unselect top 1
-requête.Si vous voulez être absolument sûr, vous pouvez activer débogage d'enregistrement, ou d'activer le
showSql
-option et de test.select top 1
.OriginalL'auteur Aleksander Blomskøld
Peut être extrait de code suivant va nous aider. Supposons que nous avons un managed Bean classe EmpBean et nous voulons seulement 5 premiers enregistrements. Donc voici le code
Ici getSession et closeSession sont statiques les méthodes de l'utilitaire qui va prendre soin de la création et fermeture de session
setMaxResults
est mis en œuvre derrière la scène.A la réponse de @Alexandre Blomskøld réponse.OriginalL'auteur Keyur