2009-03-17 8 views

Respuesta

16

Básicamente, la carga diferida tiene más beneficios que la alternativa ansiosa (rendimiento, uso de recursos). Dado que se trata de la configuración de grises predeterminada para todas las relaciones (desde Grails 1.1), generalmente no debes configurarla para una búsqueda con ganas, a menos que experimentes ciertos problemas. Tales como:

  • compartir una instancia de dominio cruzando diferentes sesiones de hibernación (por ejemplo, al poner una instancia de clase de dominio en el ámbito de sesión HTTP y acceder a las propiedades de ella - como un usuario.)
  • Conseguir LazyInitializationException al acceder dominio instancias de clase en diseños/vistas
  • Cuando esté seguro, accederá a una cierta propiedad de relación cada vez (o la mayoría del tiempo) cuando se recupera una instancia, también tendría sentido configurar esta relación para la obtención con ganas.

La búsqueda emocionante puede ser bastante peligrosa cuando se trata de grandes bases de datos. Imaginar una clase de dominio de esta manera:

// really bad example 
class TreeNode { 

    String name    

    TreeNode parent 

    static hasMany = [ childNodes: TreeNode ] 

    static mapping {  
     parent lazy: false 
     childNodes lazy: false 
    } 

} 

cuando se lee cualquiera de los casos TreeNode, que se tire de forma automática todas las otras instancias de la clase de dominio de la base de datos en su memoria. Cuando hay suficientes instancias, es probable que elimines tu aplicación obteniendo solo 1 instancia.

Cuestiones relacionadas