2012-01-20 9 views
12

Diciamo che ho una classe di dominio chiamata "Utente" che può seguire altri oggetti "Utente". Lo fa avendo un campo specificato come:Come posso cercare elementi la cui raccolta contiene un altro elemento in Grails?

def hasMany=[followedUsers:User] 

ho bisogno di fare il contrario (trovare tutti gli oggetti utente che seguono un oggetto d'uso specifica) senza impostare la relazione inversa, in quanto non è un caso d'uso eseguita spesso . Ho cercato di fare qualcosa di simile, utilizzando dispositivi di chiusura

User.findAll { it.followedUsers.contains(userInstance) } 

ma questo restituisce sempre tutti gli utenti nel database, indipendentemente dal loro status di follow. Ho provato a farlo con HQL ma ho fallito miseramente.

Qualcuno potrebbe darmi un puntatore veloce sul modo più semplice per farlo? Grazie.

risposta

13

È possibile utilizzare questa query HQL:

User.executeQuery(
    'select u from User u where :follower in elements(u.followedUsers)', 
    [follower: userInstance]) 
+2

Grazie mille. Ho finito per fare 'def followers = User.findAll (" from User where? In elements (followsUsers) ", [userInstance])'. In realtà avevo già provato questa soluzione, ma mancava la chiamata a 'elements() per completarla. – ArmlessJohn

0

A mio parere, questa sintassi è molto più pulito:

User.withCriteria { followedUsers{ eq('id', userInstance.id) } } 
Problemi correlati