Условия поиска


Я столкнулся с некоторыми проблемами при подсчете предметов.

Представьте себе следующие доменные классы

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 2

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])

Этот запрос неэффективен, так как он собирает всех авторов в цикле, но пока это нормально.