2016-06-02 7 views
0

Also habe ich diese Abfrage unten und es funktioniert, aber ich möchte vermeiden, explizit HQL schreiben und verwenden Sie die Methoden in Grails/GORM. Wie kann ich das erreichen?Wie stelle ich diese Abfrage mit integrierten Grails/GORM-Methoden

Ich habe ein Ereignis, das viele RSVP enthält (1 für jede Person). Diese Abfrage sucht nach den Ereignissen, für die ein bestimmter Benutzer noch nicht rsvp hat. LINKS VERBINDET die Rsvp-Tabelle mit der Ereignistabelle basierend auf der Benutzer-ID. Ich überprüfe, ob der Rsvp Null ist.

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()]); 

Dank

Antwort

0

Es gibt eine Annäherung. Ich bezweifle, dass die LEFT OUTER JOIN wird funktionieren, aber es sollte Ihnen die Idee geben:

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') 
} 

Es ist einer meiner Artikel, die Sie nützlich finden können: http://emmanuelrosa.com/articles/gorm-for-sqladdicts-where-clause/