longtemps sans voir!
Je serais certainement d'accord avec Rob ici. Ce que vous verrez dans les journaux sql, ce sont les requêtes multiples effectuées pour l'auteur et les livres dans les deux cas. par défaut Grails aux collections de chargement paresseux, et ainsi à la déclaration
def author= Author.findByName(params.id)
Vous avez seulement chargé l'auteur, et non pas les livres. Ajouter une instruction supplémentaire pour charger les livres de façon paginée normale sera plus efficace et plus facile à maintenir, car elle est plus propre et plus évidente.
C'est le style que j'utilise normalement pour obtenir ce type de données.
def timeline = {
println "timeline[" + params+ "]"
if (params.id) {
def author= Author.findByName(params.id)
def books = Book.withCriteria {
eq('author', author)
firstResult(5)
maxResults(10)
}
def totalBooks = Book.createCriteria().count {
eq(author, author)
}
...
}
En outre, (pas sûr à ce sujet), mais la déclaration taille() sur la collection des livres déclenchera un décompte requête, mais peut également déclencher d'autres requêtes aussi, donc il paie quand vous avez une telle données définir pour être précis dans ce que vous obtenez GORM à faire.
(mis à jour selon les projets de loi commentaire ci-dessous)
Juste curieux, quel est le problème d'avoir à faire la requête DB? L'une des intentions de la pagination est de * encourager * cette requête DB supplémentaire afin d'éviter que d'énormes collections de données traînent en mémoire. –
@Rob, @Aaron, Pour deux raisons: '1' La liste des livres est déjà là, alors pourquoi devrais-je aller le chercher à nouveau, '2' J'aurai deux méthodes différentes pour obtenir les mêmes données, qui alors les deux ont besoin d'être testés et maintenus séparément. –