2011-01-04 12 views
7

Estoy intentando cargar Padres distintos usando Criterios en Grails. La consulta es la siguientecómo obtener resultados distintos usando proyecciones y criterios

Consulta:

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

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

Pregunta: Soy incapaz de conseguir filas primarias distintas.

Otros enfoques adoptados y sus resultados: I donot saber por qué groupProperty no está funcionando. He intentado distinto en proyecciones en lugar de groupProperty y tampoco es fructífero !. si uso criteria.listDistinct en lugar de criteria.list entonces soy capaz de obtener distintas filas principales, pero el enfoque anterior requiere obtener totalCount de la consulta adicional para la paginación. Por lo tanto estoy muy intersted en conseguir filas primarias distintas utilizando criteria.list

Gracias de antemano

+0

¿Cuál es tu objetivo final? ¿Estás tratando de obtener una lista de los padres que tienen hijos que tienen libros que coinciden con un título específico? – Pat

+0

en realidad quiero cargar a todos los padres, únicos, aquellos que tienen hijos con libros que tienen el título '% M%'. Y el problema es agrupar propiedad. Los resultados no contienen padres distintos. Si es difícil de entender consulta vuelva a colocar mencionada consulta par con siguiente "hijos { niños { como ('nombre'," Pau% ") } } orden (" id", "ASC") – Rehman

+0

relaciones: Parent: Child [1: N] and Child: Book [1: N] – Rehman

Respuesta

3

Puede conseguir el mismo efecto que con criteria.listDistinct si cambia los criterios de consulta para incluir distintos resultados entidad raíz del transformador como esto:

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

sin embargo, hay una razón por la griales no devuelve resultados paginados para la llamada listDistinct por lo que podría ser un caso de recurrir a una consulta HQL con el operador in

Cuestiones relacionadas