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.