blog.jmiguel.eu

El blog personal de jmiguel.

jmiguel rodriguez

2-Minute Read

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.

Proxies

  • None

Recent Posts