Publica tu how-to

Dinos como hacer lo que sabes hacer, mándanos un email a wdonet@gmail.com y lo publicamos (dos días máximo) o si te interesa unirte al equipo de redactores, también háznoslo saber por correo.

Clases embebidas en Grails

En Grails se pueden mapear clases a entidades simplemente ubicándolas en un paquete dentro de la carpeta /grails-app/domain como se muestra abajo.  Mapeando la clase y atributos a una tabla y columnas con un mismo nombre si no se le especifica otra cosa con la propiedad mapping.

import mx.com.proyecto
class Tutor {
    String nombres
    String paterno
    String materno
    Integer edad
    static constraints = {
        nombres maxSize: 150, nullable: false, blank: false
        paterno maxSize: 80, nullable: false, blank: false
        materno maxSize: 80, nullable: true, blank: false
    }
}

Pero quizá nos interese tener nuestra entidad un poco mas amigable y legible agrupando los tres elementos nombres, paterno y materno dentro de un mismo POJO y seguirla mapeando a las mismas columnas de una sola tabla.

La regla de oro está en definir el POJO en el mismo archivo Tutor.groovy o en un archivo separado pero dentro de la carpeta /src/groovy/ (Nombre.groovy).



/grails-app/domain/Tutor.groovy

import mx.com.proyecto
class Tutor {
    Nombre nombre
    Integer edad
}

/src/groovy/Nombre.groovy
import mx.com.proyecto
class Nombre {
    String nombres
    String paterno
    String materno
    static constraints = {
        nombres maxSize: 150, nullable: false, blank: false
        paterno maxSize: 80, nullable: false, blank: false
        materno maxSize: 80, nullable: true, blank: false
    }
    static mapping = {
        nombres column: 'nombres'
        paterno column: 'paterno'
        materno column: 'materno'
    }
}


Si no colocamos el apartado mapping en la nueva clase Nombre e indicando como se mapearían las propiedades a las columnas de la tabla, los nombres de columna que tendríamos en la tabla serían:

[nombreDePropiedadTutor] + _ + [nombreDePropiedadNombre]

Esto es: nombre_nombres, nombre_paterno y nombre_materno, lo cual funcionaría solo para cuando quieras embeber el mismo POJO varias veces en la misma entidad.

Tu puedes seguir haciendo búsquedas con las propiedades de ese objeto, instanciando un objeto y asignando el valor en la propiedad que te interesa usar para buscar en la tabla Tutor.  Por ejemplo:

    Nombre rebeca = new Nombre()
    rebeca.setNombres('rebeca')
    Tutor.findAllByNombre(rebeca)

También puedes agregar métodos que te permita operar con las columnas de Nombre, ejemplo:

    String obtenerPorNombre() {
        return nombres + ' ' + paterno + ' ' + materno
    }

    String obtenerPorPaterno() {
        return paterno + ' ' + materno + ' ' + nombres
    }

Fuentes:

No hay comentarios:

Publicar un comentario

Que opinas sobre esta publicación?