Grails 2.5.0 - 通过域快速查找集合中的项目

时间:2015-10-07 19:49:05

标签: grails gorm

我有以下用于通过网络应用发送内部消息的代码:

域:

class Mail {
    ...
    User from
    static hasMany = [to: User]
    ...
}

我想要做的是启用登录并在“收件人”字段中寻址的用户查看发送给他们的所有邮件。使用以下方法使用“from”字段可以轻松完成此操作:

def totalMails = Mail.countByFrom(user)
...
def mails = Mail.findAllByFrom(user, [max: rows, offset: offset])

使用“to”字段执行此操作更加困难,我不确定如何执行此操作并快速查找。

1 个答案:

答案 0 :(得分:1)

您可以使用条件,位置或HQL查询。 HQL查询将让您了解条件和查询在数据库级别的工作方式。

标准

def totalMails = Mail.createCriteria().get {
    to {
        eq('id', user.id)
    }

    projections {
        count('id')
    }
}

def mails = Mail.createCriteria().list(max: rows, offset: offset) {
    to {
        eq('id', user.id)
    }
}

其中

def totalMails = Mail.where {
    to.id == user.id
}.count()

def mails = Mail.where {
    to.id == user.id
}.list(max: rows, offset: offset)

HQL

def totalMails = Mail.executeQuery 'select count(m) from Mail as m inner join m.to as t where t.id = :id', [id: user.id]

def mails = Mail.executeQuery 'select m from Mail as m inner join m.to as t where t.id = :id', [id: user.id], [max: rows, offset: offset]