Comment puis-je mettre en œuvre la pagination dans hibernate? Query code>
Objets a Les méthodes appelées setMaxResults code>
et setFirstResult < / code>
qui sont certainement utiles. Mais où puis-je obtenir le nombre total de résultats, de sorte que je puisse afficher un lien vers la dernière page des résultats et imprimer des résultats tels que des résultats de 200 à 250 xxx em>? P>
5 Réponses :
Vous pouvez effectuer deux questions - une requête de type (*) de type (*), qui devrait être bon marché si vous ne rejoignez pas trop de tables ensemble et une seconde requête qui a la limite définie. Ensuite, vous savez combien d'articles existe, mais ne prenez que ceux qui sont visionnés. P>
Vous pouvez utiliser QUERY.SETMAXRESUTE (INT Résultats) et Query.setFirstsResult (int Offset). P>
Modification aussi: Il n'y a aucun moyen de savoir combien de résultats vous obtiendrez. Donc, d'abord, vous devez d'abord interroger avec "Select Count (*) ...". Un peu laid, imho. P>
Quel est le statut aujourd'hui après 12 ans? Vous avez encore besoin de questions séparées?
Je pense personnellement que vous devriez gérer la pagination à l'avant. Je sais que ce n'est pas si Efficiënt mais au moins cela serait moins sujet aux erreurs. P>
Si vous utilisez le compte (*), ce qui se produirait si des enregistrements sont supprimés de la table entre les demandes d'une certaine page? Beaucoup de choses pourraient aller mal de cette façon. P>
Je ne pense pas que ce soit critique. Si les enregistrements sont supprimés et B>, vous obtenez pour parcourir les dernières pages, vous recevrez une erreur plus un lien vers les derniers enregistrements existants. Ou quelque chose de similaire.
Il y a des problèmes de pagination à l'avant si la quantité de données est prohibitivement, par exemple, 1 million d'enregistrements ou quelque chose du genre.
Vous devez faire une requête séparée pour obtenir les résultats max ... et dans le cas où entre le moment A de la première fois, le client émet une demande de pagination à l'heure B lorsqu'une autre demande est émise, si de nouveaux enregistrements sont ajoutés ou Certains enregistrements correspondent désormais aux critères, alors vous devez interroger à nouveau le maximum pour réfléchir telle. Je fais habituellement cela dans le HQL comme celui-ci pour critères code> Les requêtes, je pousse habituellement mes données dans un dto comme celui-ci p>
Vous pouvez simplement définir des éditeurs sur le nombre maximal de lignes que vous souhaitez revenir. Il n'y a aucun préjudice dans la définition de cette valeur supérieure au nombre de lignes réelles disponibles. Le problème Les autres solutions sont qu'elles supposent que la commande des enregistrements reste la même de chaque répétition de la requête et il n'y a pas de modifications en cours entre les commandes. P>
Pour éviter que si vous voulez vraiment faire défiler les résultats, il est préférable d'utiliser les ScrollAleresults. Ne jetez pas cet objet entre la pagination, mais utilisez-le pour conserver les enregistrements dans le même ordre. Pour connaître le nombre d'enregistrements des ScrollAleresults, vous pouvez simplement passer à la dernière position (), puis obtenir le numéro de ligne. N'oubliez pas d'ajouter 1 à cette valeur, car les numéros de ligne commencent à compter à 0. p>
Je suis d'accord avec les deux autres réponses. De plus, je demande des pratiques de mise en œuvre dans ce post: Stackoverflow.com/Questtions/1600440/...