NHibernate在已加载时延迟加载一对多关系

NHibernate在已加载时延迟加载一对多关系,nhibernate,hibernate,Nhibernate,Hibernate,我有一个树,其中每个节点都是一个资源类: public abstract class Resource { public virtual Guid Id { get; set; } public virtual Resource Parent { get; set; } public virtual IList<Resource> ChildResources { get; set; } } 公共抽象类资源 { 公共虚拟

我有一个树,其中每个节点都是一个资源类:

public abstract class Resource 
{ 
        public virtual Guid Id { get; set; } 
        public virtual Resource Parent { get; set; } 
        public virtual IList<Resource> ChildResources { get; set; } 
} 
公共抽象类资源
{ 
公共虚拟Guid Id{get;set;}
公共虚拟资源父级{get;set;}
公共虚拟IList子资源{get;set;}
} 
正如您所看到的,这个类是抽象的,并且有许多来自资源的不同派生类(目前是3个,后面还有更多)

在我的数据库中,我有一个用于资源的表,以及一个用于每个类的表 源于资源。它们与
一起映射

我读过:

我有与Ayende相同的代码来加载我的树:

var resource = UnitOfWork.Current.Session
    .CreateQuery("from Resource r join fetch r.ChildResources")
    .SetResultTransformer(new DistinctRootEntityResultTransformer())
    .SetReadOnly(true)
    .List<Resource>();
var resource=UnitOfWork.Current.Session
.CreateQuery(“从资源r加入获取r.ChildResources”)
.SetResultTransformer(新DistincTrotentyResultTransformer())
.SetReadOnly(真)
.List();
这一切都很正常(所有资源都通过一次选择返回),但是,我在枚举资源的ChildResources列表时看到额外的选择

是因为这个吗

不管怎样,我如何防止这种情况发生

下面是关系映射的一部分(类名 为清晰起见,进行了修剪):


谢谢

更新

稍有疏忽,仅在枚举树中叶节点的子集合时发出额外的选择…

执行以下操作之一:

<bag ... lazy="false">

lazy=false没有区别,这就是我使用的HQL。当执行HQL时,我会从数据库返回所有资源行,很好:)但是。。。当我枚举ChildResources时,它再次命中数据库“从资源中选择,其中Parent_id=
我已经更新了问题以反映这一点,我还发现了其他一些问题。您看到的选择是什么?第一个
select
带有
左连接的
连接子类的
返回所有资源。额外的选择是我期望在延迟加载情况下看到的<代码>从父项id=foo的资源中选择
<bag ... lazy="false">
var resources = session.CreateQuery("from Resource r join fetch r.ChildResources");