2011-03-22 13 views
6

Tengo un dominio de Grails llamado Personas, y quiero verificar que cada persona tenga hijos o no. Los niños son otros objetos de personas. Aquí está mi estructura de dominio:Propiedad transitoria en el dominio Grails

class People implements Serializable { 

    static constraints = { 
     name (nullable : false, unique : true) 
     createdBy (nullable : false) 
     creationDate (nullable : false) 
    } 

    static transients = ['hasChild'] 

    static mapping = { 
     table 'PEOPLE' 
     id generator: 'sequence', params : [sequence : 'SEQ_PK_ID'] 
     columns { 
      id column : 'APEOPLE_ID' 
      parentPeople column : 'PARENT_PEOPLE_ID' 
     } 
     parentPeople lazy : false 
    } 

    People parentPeople 
    String name 
    String description 

    Boolean hasChild() { 
     def childPeoples = People.createCriteria().count { 
      eq ('parentPeople', People) 
     } 
     return (childPeoples > 0) 
    } 
} 

Pero no puedo llamar people.hasChild() en cualquier lugar. ¿Podrías por favor ayudarme en esto? Muchas gracias!

Respuesta

4

Es porque en eq ('parentPeople', People), Grails no puede entender qué es "Gente" (es una clase). Debe reemplazar "Personas" por this. Por ejemplo:

static transients = ["children"] 

    def getChildren() { 
     def childPeoples = People.findAllByParentPeople(this, [sort:'id',order:'asc']) 
    } 
+0

Se puede realizar una incubadora así? –

0

Otra forma de obtener el mismo resultado es usar Named Queries. Parece más conciso y fue creado específicamente para este propósito. También me gusta porque se ajusta al patrón de declaraciones estáticas en un modelo de dominio y es esencialmente un criterio, que utilizo en todas mis aplicaciones. Declarar un transitorio y luego escribir una clausura parece un poco problemático cuando puedes declarar consultas con nombre ... solo mi opinión.

intentar algo como esto:

static namedQueries = { 
    getChildren { 
     projections { 
      count "parentPeople" 
     } 
    } 
} 
Cuestiones relacionadas