我正在使用Nhibernate,但由于对Nhibernate的理解不足,我仍然对这两个主题感到困惑(延迟加载和急切加载)。
请定义我的延迟加载和热切加载简单的单词。 为什么我们使用castle.Dynamic代理?
答案 0 :(得分:11)
延迟加载和预先加载是每个ORM中必须存在的概念。 让我们采取亲子关系:
class Parent {
String name;
List<Child> childs;
}
class Child {
String name;
}
当您加载Parent的元素时,ORM必须决定它是否也加载子集合(例如通过连接),或者它是否延迟查询以加载子集直到您实际访问集合
parent.childs.get(0)
如果要在访问集合时触发查询以检索子节点,则需要对子集合进行某种回调/拦截。这是通过集合上的代理完成的,因此您可以拦截对集合的每次访问以从db获取数据。这就是为什么你需要一个代理/拦截库,比如Castle。
答案 1 :(得分:4)
延迟加载=等待代码在从数据库加载之前显式访问属性/集合。
急切加载=提前主动加载该数据,无论代码是否曾使用过它。
代理用于拦截对所述属性/集合的访问,以便激发负载。