什么是关于何时在域类中将fetchMode设置为“eager”的一般指导原则? fetchMode“eager”与默认“懒惰”的优缺点是什么?
请提供一些具体示例/用例,说明何时使用“eager”(fetchMode = eager),何时不使用(fetchMode = lazy)。
答案 0 :(得分:16)
基本上,延迟加载比急切的替代方案(性能,资源的使用)具有更多的好处。因为它是所有关系的默认grails设置(自Grails 1.1以来),除非遇到某些问题,否则通常不应将其配置为急切提取。如:
在处理庞大的数据库时,急切的提取可能非常危险。想象一下像这样的Domain类:
// really bad example
class TreeNode {
String name
TreeNode parent
static hasMany = [ childNodes: TreeNode ]
static mapping {
parent lazy: false
childNodes lazy: false
}
}
当您读取任何TreeNode实例时,它会自动将域类的所有其他实例从数据库中提取到您的内存中。当有足够的实例时,你可能只通过获取一个实例来杀死你的应用程序。