grails dns transient

Propiedad transitoria en el dominio de Grails



dns transient (2)

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

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 a people.hasChild () en ninguna parte. ¿Podrías por favor ayudarme en esto? Muchas gracias!


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

static transients = ["children"] def getChildren() { def childPeoples = People.findAllByParentPeople(this, [sort:''id'',order:''asc'']) }


Otra forma de obtener el mismo resultado es usar consultas con nombre . 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.

Pruebe algo como esto:

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