我正在研究一个具有丰富对象模型和各种聚合根集合的项目。使用ActiveRecord在nHibernate中加载惰性加载实体
我们使用城堡堆栈(单轨到nHibernate with ActiveRecord)。
我们已经将聚合根标记为惰性[ActiveRecord(Lazy = true)]
,并在我们的Repository上定制了“渴望”例程,以便快速获取对象图。我们使用HQL来定义来自我们的根子集合的渴望提取,例如
如果Account
是聚合根(并且标记了延迟加载),那么我们将热切地获取Account .. Order .. Product
实体以获得完整的图。
到目前为止没有意外(希望)。
现在,如果在上面的例子中,产品也被标记为[ActiveRecord(Lazy = true)]
,这似乎停止HQL中的渴望获取指令。
有没有人知道一种方法来强制延迟加载子对象的渴望获取?
干杯 伊恩
更新:
好这里的一些例子HQL,从 'me.yahoo.com/../1' 下面,我们使用IMuliQuery到reslove使用示例在获取多对多关系时,N + 1依赖关系。我们也明确地使用了多对多的映射类。因此,我们的HQL是:
from Account a 'm eager loading the graph
inner join fetch a.AccountsOrders ao
inner join fetch ao.Order
from Account a 'm eager loading the graph
inner join fetch a.AccountAddresses aa
inner join fetch aa.Address ad
where a.ID = ?
...所以这个执行2条SQL语句,返回所需的最小行集,我们可以解决这个分解成一个单一的对象图。尼斯。
但是......如果说,Address
被标记为延迟加载(和Order
没有),访问Order
不会触发进一步的SQL语句,但访问Address
确实,尽管双方都渴望加载。
那么,为什么上面的懒惰负载实体Address
渴望被上述语句提取?
请发布您的hql – 2008-12-19 15:37:01
它是通过nHibernate升级解决的。 – penderi 2010-07-27 08:18:26