давно не виделись!
Я бы, конечно, согласился с Робом здесь.
То, что вы увидите в журналах sql, - это несколько запросов для автора и книг в обоих случаях.Grails по умолчанию использует отложенную загрузку коллекций, поэтому в операторе
def author= Author.findByName(params.id)
Вы загрузили только автора, а не книги.
Добавление дополнительного оператора для загрузки книг в обычном разбивке на страницыпуть будет более эффективным и более обслуживаемым, так как он будет более чётким и более очевидным, что он делает.
Это стиль, который я обычно использую для получения данных такого типа.
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)
}
...
}
Кроме того (не уверен в этом), но оператор size () в коллекции книг вызовет запрос подсчета, но может также инициировать и другие запросы, поэтому он окупается, когда у вас есть такой большой набор данных, чтобы быть конкретными в том, чтовы получаете GORM.
(обновляется в соответствии с комментариями по счетам ниже)