如何使用内置的Grails / GORM方法表示此查询

时间:2016-06-02 18:35:09

标签: grails hql gorm

所以我在下面有这个查询并且它有效,但我想避免明确编写HQL并使用Grails / GORM中可用的方法。我怎样才能做到这一点?

我有一个包含许多RSVP的事件(每个人1个)。此查询正在查找特定用户尚未rsvp的事件。 LEFT使用基于user_id的Event表连接Rsvp表。我检查一下Rs​​vp是否为空。

def events = Event.executeQuery("""
        SELECT event
        FROM Event AS event
        LEFT JOIN event.rsvps AS rsvp
            WITH rsvp.user.id = ?
        WHERE event.active = 1
        AND event.startDate >= ?
        AND rsvp.id IS NULL
    """, [(long)1, new Date().clearTime()]);

由于

1 个答案:

答案 0 :(得分:0)

有一个近似值。我怀疑LEFT OUTER JOIN是否有效,但它应该给你一个想法:

import static org.hibernate.sql.JoinType.*

def events = Event.withCriteria {
    createAlias('rsvps', 'r', LEFT_OUTER_JOIN)
    // I'm not sure about the following line. Aliases change things a bit
    // Besides, it conflicts with the isNull().
    eq('r.user.id', 1) 
    eq('active', 1)
    ge('startDate', new Date().clearTime())
    isNull('r.id')
}

我可以找到有用的文章之一:http://emmanuelrosa.com/articles/gorm-for-sqladdicts-where-clause/