Vamos a continuar hablando un poco mas sobre agrupaciones, pero esta vez enfocándonos a como se cargan en memoria
Mola ser perezoso
Una de las primeras cosas que se aprenden sobre las relaciones en GORM es que, por defecto, se cargan de forma perezosa. En otras palabras, cuando recuperas una instancia de clase de dominio desde la base de datos, ninguna de sus relaciones se carga. En lugar de eso, GORM sólamente cargara los datos relaciones cuando los necesites de verdad.
Vamos a ser un poco mas concretos recuperando un ejemplo del artículo anterior
class Lugar {
String ciudad
}
class Libro {
String titulo
static constraints = {
titulo(blank: false)
}
}
class Autor {
String nombre
Lugar lugar
static hasMany = [ libros: Libro ]
}
Si recuperamos una instancia de Autor, la única información que podemos realmente usar sin tener que lanzar otra petición a la base de datos, es el nombre del Autor. Cuando intentamos recuperar su Lugar asociado o los libros, se lanzarán mas peticiones a la base de datos para obtener la información extra que necesitamos.
Esta opcion es, a priori, la mas sensata en especial con modelos de
datos complejos donde se pueden tener largas cadenas de asociaciones. Si
el comportamiento por defecto fuera eager (<N.del T: eager =
impaciente />) podríamos encontrarnos con la situación de tener
que recuperar la mitad de una base
de datos sólamente por haber pedido una única instancia.
Por supuesto: esta opcion tiene un coste. Veremos tres efectos secundarios de este tipo de asociaciones lazy (<N.del T: lazy = perezoso />) de forma que sepas lo que son, puedas reconocer los síntomas y solucionar los problemas de estos efectos secundarios.