使用gorm对子表进行选择和排序

时间:2013-09-10 20:39:46

标签: grails gorm

我正在开发一个grails项目,我有一个域类(Messages.groovy),它有:

static hasMany = [recipients:Recipient]

我正在尝试查询属于某个帐户的所有邮件,并对其拥有的收件人数进行排序。

到目前为止,我完全迷失了,试图查看文档我唯一想到的是:

def query = {
    eq('account', account)
    projections {
        count "recipients"
    }
}

我可能会离开,但我甚至不确定如何谷歌这个。我只需要获取消息对象以及按收件人数排序的收件人数。

1 个答案:

答案 0 :(得分:0)

实现这一目标的最简单和可理解的方法是在查询中使用查询和地图(略有冗长),但与复杂标准相比,可以轻松理解。

def result = Message.executeQuery("select \
                                   new map(m as message, count(r) as countRec) \
                                   from Message as m \
                                   inner join m.recepients as r \
                                   where m.account = :account \
                                   group by m \
                                   order by count(r) desc", [account: account])

result.each{
    println it.message
    println it.countRec
}