La mise en œuvre de résultat de pagination en veille prolongée (nombre total de lignes)
Comment puis-je mettre en œuvre la pagination en veille prolongée? Le Requête
objets a des méthodes appelé setMaxResults
et setFirstResult
qui sont certainement utiles. Mais où puis-je obtenir le nombre total de résultats, de sorte que je peux montrer le lien vers la dernière page de résultats, et à imprimer des choses telles que les résultats de 200 à 250 de xxx?
Je suis d'accord avec les deux autres réponses. En outre, je demande pour la mise en œuvre des pratiques dans ce post : stackoverflow.com/questions/1600440/...
OriginalL'auteur flybywire | 2009-10-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la Requête.setMaxResults(int résultats) et de la Requête.setFirstResult(int offset).
Édition de trop: Il n'y a aucun moyen de savoir comment beaucoup de résultats que vous obtiendrez. Donc, vous devez d'abord requête avec "select count(*)...". Un peu moche, à mon humble avis.
OriginalL'auteur sinuhepop
Vous devez faire une requête distincte pour obtenir le max de résultats...et dans le cas où, entre temps, Un de la première fois, le client émet une pagination demande à B quand une autre demande est émise, si de nouveaux enregistrements sont ajoutés ou certains dossiers maintenant, les critères, alors vous devez interroger le max de nouveau pour tenir compte de ces. J'ai l'habitude de le faire dans les requêtes HQL comme ce
pour
Criteria
requêtes j'ai l'habitude de pousser mes données dans un DTO comme ceOriginalL'auteur non sequitor
vous pourriez exécuter deux requêtes - un count(*) type de requête, qui doit être bon marché si vous n'êtes pas joindre trop de tables, et une seconde requête qui a les limites fixées. Alors vous savez combien d'articles existe, mais seulement saisir les être vu.
OriginalL'auteur Chii
Vous pouvez simplement setMaxResults le nombre maximum de lignes que vous voulez retourner. Il n'y a pas de mal dans la définition de cette valeur plus grande que le nombre de lignes disponibles. Le problème de l'autre des solutions est qu'ils supposent l'ordre des dossiers reste la même à chaque répétition de la requête, et il n'y a aucun changements qui se produisent entre les commandes.
Pour éviter que si vous voulez vraiment faire défiler les résultats, il est préférable d'utiliser le ScrollableResults. Ne jetez pas cet objet à l'écart entre la pagination, mais l'utiliser pour conserver les documents dans le même ordre. Pour connaître le nombre d'enregistrements de la ScrollableResults, vous pouvez tout simplement passer à la dernière (), et ensuite de récupérer le numéro de ligne. N'oubliez pas d'ajouter 1 à cette valeur, depuis les numéros de ligne commencent à compter à partir de 0.
OriginalL'auteur Bill
Personnellement, je pense que vous devez gérer la pagination dans le front-end. Je sais que ce n'est pas que efficiënt mais au moins, ils seraient moins enclins à faire des erreurs.
Si vous souhaitez utiliser la fonction count(*) chose qu'arriverait-il si les enregistrements sont supprimés de la table entre les demandes pour une certaine page? Beaucoup de choses peuvent mal se passer de cette façon.
il y a des problèmes avec la pagination sur le front-end si le volume de données est trop grande - dire 1 million de disques ou de quelque chose.
OriginalL'auteur NickDK