2011-01-04 7 views
7

Sto provando a caricare genitori distinti usando i Criteri in Grails. La query è come seguendocome ottenere risultati distinti usando Proiezioni e Criteri

Query:

def criteria = Parent.createCriteria(); 
     results = criteria.list(max:params.max, offset:params.offset){ 
      projections{ groupProperty('id') } 
      children{ 
       books{ 
        like('title',"%book") 
        } 
       } 
      order("id","asc") 
     } 

classi di dominio

class Parent { 

    String name 

    static hasMany = [children:Child] 

    static constraints = { 
    } 
} 


class Child { 

     String name 
     Parent parent 

     static belongsTo = [parent:Parent] 
     static hasMany = [books:Book] 
     static constraints = { 
     } 
    } 


class Book { 

     String title 
     Child child 

     static belongsTo = [child:Child] 
     static constraints = { 
     } 
    } 

Domanda: non sono in grado di ottenere righe padre distinti.

Altri approcci adottati ei relativi risultati: I donot sapere perché groupProperty non funziona. Ho provato distinto in proiezioni anziché groupProperty e non è fruttuoso anche !. se uso criteria.listDistinct invece di criteria.list quindi sono in grado di ottenere righe padre distinte ma un approccio precedente richiede di ottenere totalCount dalla query aggiuntiva per l'impaginazione. Quindi io sono molto interessato ai ottenere righe padre distinti utilizzando criteria.list

Grazie in anticipo

+0

Qual è il tuo obiettivo finale? Stai cercando di ottenere un elenco dei genitori che hanno figli che hanno libri che corrispondono a un titolo specifico? – Pat

+0

in realtà voglio caricare tutti i genitori, unici, quelli hanno figli con libri con titolo '% M%'. E il problema è groupproperty. I risultati non contengono genitori distinti. Se è difficile capire di query quindi sostituire suddetta interrogazione pari con seguente "i bambini { bambini { come ('name'," pau% ") } } ordine (" id", "ASC") – Rehman

+0

relazioni: Parent: Child [1: N] e Child: Book [1: N] – Rehman

risposta

3

È possibile ottenere lo stesso effetto con criteria.listDistinct se si modificano i criteri di query per includere distinto risultati entità radice del trasformatore come questo:

results = criteria.list(max:params.max, offset:params.offset){ 
     children{ 
      books{ 
       like('title',"%book") 
       } 
      } 
     resultTransformer Criteria.DISTINCT_ROOT_ENTITY    
     order("id","asc") 
    } 

C'è comunque un motivo per cui graal non restituisce i risultati di paging per la chiamata listDistinct quindi potrebbe essere un caso di ricorrere a una query HQL con l'operatore in

Problemi correlati