所以我在下面有这个查询并且它有效,但我想避免明确编写HQL并使用Grails / GORM中可用的方法。我怎样才能做到这一点?
我有一个包含许多RSVP的事件(每个人1个)。此查询正在查找特定用户尚未rsvp的事件。 LEFT使用基于user_id的Event表连接Rsvp表。我检查一下Rsvp是否为空。
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()]);
由于
答案 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/