Grails 条件搜索

Grails 条件搜索,grails,gorm,hibernate-criteria,Grails,Gorm,Hibernate Criteria,我在数物品时遇到了一些问题 想象一下下面的域类 class Book { String name } class Author { String name static hasMany = [books:Book] } 如何获得按图书数量排序的作者列表? 以下是我的尝试: def c = Author.createCriteris() c.list { projections { count 'books', 'numBooks' groupProperty '

我在数物品时遇到了一些问题

想象一下下面的域类

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'
}

但不知怎的,我只得到了无法使用的结果。。。我不知道如何将Author对象加入到rsult列表中-(

我还没有试过,但是你不能做一些类似于:

class Author {

    String name
    static hasMany = [books:Book]

    static namedQueries = {
        sortByMostBooks {
            books {
                order('size', 'desc')
            }
        }
    }
}
然后通过名为query的清理器获得访问权限

Author.sortByMostBooks.list();
此外,您可能希望在Book domain类中包含一个belongsTo:

static belongsTo = Author;
或:

如果一本书可能有多个作者

那么你会得到一些东西

我仍然不知道如何使用一个标准,但通过切换到HQL,我成功了

因此,如果有人提出了标准解决方案,他仍然会因为正确答案而获得奖金:-)

我的问题是:

Author.executeQuery("""
    select 
        a, size(a.books) as numBooks 
    from 
        Author a 
    group by 
        id 
    order by 
        numBooks DESC
""",[max:20])

这个查询效率不高,因为它在一个循环中获取所有作者,但现在还可以。

Thanx。命名查询是一个好主意,但它仍然使用条件生成器。“大小”似乎不是正确的语法。。。
Author.executeQuery("""
    select 
        a, size(a.books) as numBooks 
    from 
        Author a 
    group by 
        id 
    order by 
        numBooks DESC
""",[max:20])