Wie Sie den Umbruch eines JPA-Query
Habe ich eine Vorlage-Tabelle mit Spalten wie ID
Name
Code
unter anderen Eigenschaften. Meine Anforderung ist auf der Suche nach Aufzeichnungen auf der Grundlage der genannten Eigenschaften und eine mit Seitenzahlen festlegen.
Dies ist der pseudocode für das, was ich Suche:
searchSubmission(searchFilter sf,pageIndex,noOfRecords) {
query = 'from submisssion where code=sf.code or id=sf.id order by id start_from (pageIndex*noOfRecords) limit noOfRecords'
return result();
}
Scheint es viele Optionen, wie CriteriaBuilder
NamedQuery
usw. Welche ist die effizienteste in dieser situation?
InformationsquelleAutor der Frage Tapan Chandra | 2013-04-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für alle JPA-query-Objekte (außer für native SQL-Abfragen), die Sie verwenden würden, Paginierung durch die setMaxResults(int) und setFirstResult(int) - Methoden. Zum Beispiel:
JPA führen Paginierung für Sie.
Benannte Abfragen sind einfach vordefiniert und können zwischengespeichert werden, während andere Arten sind dynamisch angelegt.
So ist die Wahl ist die Verwendung von JPQL wie:
Oder CriteriaBuilder api bilden eine ähnliche Abfrage:
Vergessen Sie nicht die Werte der parameter, die mithilfe von query.setParameter("id", sf.id) zum Beispiel.
InformationsquelleAutor der Antwort Chris
Können Sie
Pageable
in der repository-Methode}
- Und service-layer erstellen, können Sie die
Pageable
Objekt:InformationsquelleAutor der Antwort sendon1982
Als ich erklärte, in dieser ArtikelSie können die JPA-Paginierung für beide Entität Abfragen und native SQL.
Begrenzen die zugrunde liegende Abfrage
ResultSet
Größe, die JPAQuery
- Schnittstelle bietet diesetMaxResults
Methode.Navigation auf der folgenden Seite erfordert die Positionierung der Ergebnismenge, wo die Letzte Seite beendet. Für diesen Zweck, die JPA
Query
- Schnittstelle bietet diesetFirstResult
Methode.Mit Paginierung mit einer JPQL-Abfrage sieht wie folgt aus:
Liste Beiträge = entityManager
.createQuery(
"wählen Sie" p " +
"aus Post p" +
"order by p.createdOn ")
.setFirstResult(10)
.setMaxResults(10)
.getResultList();
Kriterien API ist genau das gleiche, da müssen Sie erstellen eine
Query
von derCriteriaQuery
:InformationsquelleAutor der Antwort Vlad Mihalcea