Observatorio de Grails 
  • Inicio
  • Actualidad
  • Artículos
  • Tutoriales
  • Eventos
  • Foro
  • Acerca de
¿Clave ajena u otra tabla adicional en relaciones 1:M?
mar 04

Conocer cuándo se modifican mis datos

publicado por Enrique Medina Montenegro

0 comentarios
986 visitas
(2 votos, media: 3,50)

Enrique Medina Montenegro

Twitter  |  LinkedIn

Con más de 14 años de experiencia en el mundo de las TI, donde comenzó desarrollando aplicaciones de escritorio en Delphi o Visual Basic, este Ingeniero en Informática por la Universidad de Alicante (1991-1996) ha ido perfilando su actividad profesional hacia las arquitecturas J2EE, donde siempre ha seguido muy atento, e incluso colaborado en ocasiones, con proyectos open-source como MyFaces, Spring, Hibernate, Groovy o Grails. Ocupando puestos desde Programador Junior hasta Arquitecto Senior de Soluciones, Enrique ha sido testigo de cómo ha ido evolucionando la tecnología en torno al desarrollo de aplicaciones web, adquiriendo un conocimiento y experiencia que le permiten evaluar con detalle las necesidades de cada proyecto y aplicar las herramientas que maximizan su productividad. Actualmente, Enrique se ha especializado en el framework de desarrollo Grails, y ejerce la Dirección Técnica de proyectos basados, entre otras, en esta tecnología.

Una de las cosas que más me gustan en Grails son la multitud de “perlas” que ofrece a los desarrolladores. En algunos casos se asemejan hasta a “huevos de pascua” porque no se encuentran documentadas y, desde luego, son de suma utilidad para el que las descubre. Aquí no vamos a descubrir ningún “huevo de pascua“, pero sí una de esas “perlas” que nos va a ayudar mucho en aquellos casos en que necesitemos llevar un seguimiento sencillo de la última vez que se modificó algún objeto en la base de datos (BD).

Cuando utilizamos GORM, Grails hace mucho trabajo sucio por nosotros; pero además, nos ofrece la posibilidad de “sellar” nuestros datos indicando en qué fecha fueron creados y cuándo fue la última vez que se modificaron (timestamping en inglés). Aunque se trata de una auditoría muy liviana, puede ser muy útil en determinados casos; y como de todas formas es “gratis“…

Así, pues, tenemos varias posibilidades: delegar toda la gestión a GORM, compartir la gestión con GORM, y por último, decir a GORM que seremos nosotros quienes lo gestionaremos todo. Vamos a ver cada uno de los casos en detalle.

Todo tuyo, GORM

Cuando no tenemos unas necesidades específicas de control de cambios en nuestros datos, lo más rápido y sencillo es confiar en GORM. Para ello, tan fácil como declarar dos campos en cada una de las clases de nuestro dominio que queramos controlar:

class MiClaseControlada {

	........

	Date dateCreated
	Date lastUpdated

	static constraints = {
	}

}

Y eso es todo… A partir de este momento, Grails automáticamente creará esos dos campos en la BD y, cada vez que se cree o modifique una instancia de la clase, se ocupará de forma transparente de incluir dichos campos en el comando SQL correspondiente. ¿Se puede pedir más?

Unir fuerzas con GORM

Sin embargo, siempre nos encontramos casos en que, de alguna forma, necesitamos influir o cambiar el comportamiento por defecto de Grails. Pues bien, igual de sencillo que en el caso anterior: llegan los eventos al rescate.

beforeInsert

Evento que se ejecuta justo antes de que un objeto se guarde en BD. Por ejemplo:

class MiClaseControlada {

	Date dateCreated
	Date lastUpdated

	def beforeInsert = {
		dateCreated = new Date()
	}

}
beforeUpdate

Evento que se ejecuta justo antes de que un objeto se actualice en BD. Por ejemplo:

class MiClaseControlada {

	Date dateCreated
	Date lastUpdated

	def beforeInsert = {
		dateCreated = new Date()
	}

	def beforeUpdate = {
		lastUpdated = new Date()
	}

}
beforeDelete

Evento que se ejecuta justo antes de que un objeto se elimine de la BD. Por ejemplo:

class MiClaseControlada {

	Date dateCreated
	Date lastUpdated

	def beforeDelete = {
		println "Eliminando objeto de tipo MiClaseControlada con ID = $id"
	}

}
onLoad

Evento que se ejecuta cuando un objeto se carga de la BD. Por ejemplo:

class MiClaseControlada {

	Date dateCreated
	Date lastUpdated

	def onLoad = {
		println "Objeto de tipo MiClaseControlada con ID = $id acaba de ser cargado"
	}

}

Déjame a mi sólo, GORM

Por último, si lo que necesitamos es tener control total sobre este proceso, se lo decimos a Grails y seguro que no se enfada:

class MiClaseControlada {

	Date dateCreated
	Date lastUpdated

	static mapping = {
		autoTimestamp false
	}

}

Como se ha explicado a lo largo de este breve artículo, GORM proporciona toda la flexibilidad que el desarrollador quiera y necesite, actuando de forma transparente para quitarnos trabajo o bien cediéndonos el control para que nosotros decidamos en cada momento qué queremos hacer. A mi particularmente me fascina, pero para gustos los colores…

Del.icio.us Facebook LinkedIn Twitter

Escribir un comentario

Clic para cancelar respuesta.

Actualidad  Entradas relacionadas  si te ha interesado la entrada te proponemos otras lecturas relacionadas

  • jun17

    Herencia con GORM

    publicado por Carlos Rico Avendaño

    4 comentarios
    1.598 visitas
    (16 votos, media: 4,00)
  • mar10

    Exportar nuestro esquema de base de datos

    publicado por Enrique Medina Montenegro

    0 comentarios
    500 visitas
    (5 votos, media: 3,80)
  • mar05

    Exprimiendo el belongsTo con múltiples relaciones bidireccionales

    publicado por Enrique Medina Montenegro

    14 comentarios
    3.843 visitas
    (5 votos, media: 5,00)

Comentarios recientes  Comentarios recientes

  • pedro luis hola como cargo imágenes de un archivo para mostrarlo en un reporte con los demás datos; en Reportes en Grails con iReport
    17/05/2012 a las 21:03

  • yo 123; en Clusterizar una aplicación Grails con EhCache (inglés)
    24/04/2012 a las 17:33

  • yo muy buebo; en Clusterizar una aplicación Grails con EhCache (inglés)
    24/04/2012 a las 17:21

Twitter  

preload preload preload

Síguenos en Twitter  |  Facebook
Inicio  |  Actualidad  |  Artículos  |  Tutoriales  |  Eventos  |  Foro  |  Acerca de

© 2010 Observatorio de Grails. Todos los derechos reservados.