我在尝试计算物品时遇到了一些问题。
想象一下以下域类
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列表....: - (
答案 0 :(得分:2)
没有尝试过,但你不能做类似的事情:
class Author {
String name
static hasMany = [books:Book]
static namedQueries = {
sortByMostBooks {
books {
order('size', 'desc')
}
}
}
}
然后通过清理器命名查询
进行访问Author.sortByMostBooks.list();
此外,您可能希望在Book域类中包含belongsTo:
static belongsTo = Author;
或:
static belongsTo = [authors:Author];
如果一本书可能有多位作者
答案 1 :(得分:0)
得到了一些东西!
我仍然不知道如何用标准来做,但是通过切换到HQL,我成功了。
因此,如果有人提出标准解决方案,他仍会获得正确答案的奖金: - )
这是我的查询:
Author.executeQuery("""
select
a, size(a.books) as numBooks
from
Author a
group by
id
order by
numBooks DESC
""",[max:20])
此查询效率不高,因为它在循环中获取所有作者,但现在还可以。