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