2011-01-04 9 views
7

Próbuję załadować różnych rodziców za pomocą kryteriów w Grails. Zapytanie jest następującyJak uzyskać różne wyniki za pomocą prognoz i kryteriów

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

Klasy Domena

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 = { 
     } 
    } 

pytanie: Nie jestem w stanie uzyskać odrębne wiersze rodzica.

Inne przyjęte Podejścia i ich wyniki: I dawca wiem dlaczego groupProperty nie działa. Próbowałem odrębny w prognozach zamiast groupProperty i nie jest owocny też !. jeśli używam kryteria.listDistinct zamiast kryteria.list, wtedy jestem w stanie uzyskać odrębne Parent Parents, ale wcześniejsze podejście wymaga uzyskania totalCount z dodatkowego zapytania dla stronicowania. Dlatego jestem bardzo zainteresowani w uzyskaniu wyraźnych wierszy Parent użyciu criteria.list

góry dziękuję

+0

Jaki jest twój cel końcowy? Czy próbujesz uzyskać listę rodziców, którzy mają dzieci, które mają książki, które pasują do konkretnego tytułu? – Pat

+0

w rzeczywistości chcę załadować wszystkich rodziców, unikatowych, mają dzieci z książkami o tytule "% M%", a tam problemem jest groupproperty. Wyniki nie zawierają odrębnych rodziców. Jeśli trudno jest zrozumieć zapytanie, zastąp powyższą wartość zapytania następującymi "dziećmi { dzieci { jak (" name "," pau% ") } } kolejność (" id "," asc ") – Rehman

+0

relacje: Rodzic: Dziecko [1: N] i Dziecko: Książka [1: N] – Rehman

Odpowiedz

3

można osiągnąć ten sam efekt, jak z criteria.listDistinct jeśli zmienić kryteria kwerendy zawierać wyraźne rezultaty jednostka korzeń jak transformator to:

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

Istnieje jednak powód Grails nie zwraca stronicowanych wyniki dla listDistinct rozmowy, więc może to być przypadek uciekać się do zapytania HQL z operatorem in

Powiązane problemy