Условия поиска
Я столкнулся с некоторыми проблемами при подсчете предметов.
Представьте себе следующие доменные классы
class Book {
String name
}
class Author {
String name
static hasMany = [books:Book]
}
Как получить список авторов, отсортированных по количеству книг?
Вот моя попытка:
def c = Author.createCriteris()
c.list {
projections {
count 'books', 'numBooks'
groupProperty 'id'
}
order 'numBooks', 'desc'
}
Но почему-то я получаю только бесполезные результаты... и я не знаю, как присоединить объекты автора к списку rsult.... :- (2 ответа:
Не пробовал, но не мог бы ты сделать что-нибудь вроде:
class Author { String name static hasMany = [books:Book] static namedQueries = { sortByMostBooks { books { order('size', 'desc') } } } }
, а затем получить доступ к очистителю с именем query
Author.sortByMostBooks.list();
Кроме того, вы можете включить в класс домена книги класс принадлежности:
static belongsTo = Author;
Или:
static belongsTo = [authors:Author];
Если книга, вероятно, имеет несколько авторов
Есть что-то!
Я до сих пор не знаю, как это сделать с критерием, но переключившись на HQL, я преуспел.
Так что если кто-то придумает критериальное решение, он все равно получит бонус за правильный ответ : -)
Вот мой запрос:
Author.executeQuery(""" select a, size(a.books) as numBooks from Author a group by id order by numBooks DESC """,[max:20])
Этот запрос неэффективен, так как он собирает всех авторов в цикле, но пока это нормально.