NHibernate - 急切加载的问题

时间:2010-01-11 12:01:45

标签: nhibernate hql

我有一个ClassA,它有许多ClassB元素:

public abstract class ClassA: IEntity<ClassA>
{
    public virtual IList<ClassB> ClassBList { get; protected set; }
     ...
}

然后ClassB引用ClassC元素:

public class ClassB 
{

    public  ClassC CEntity { get; private set; }

    public  Percentage Percentage{ get; private set; }
    ...
}

这里是ClassA的映射(ClassB没有映射):

        HasMany(a => a.ClassBList).Component(a =>
        {
            a.References(b => b.CEntity , "IDCEntity").ForeignKey("ID").Cascade.SaveUpdate().Not.LazyLoad();
            t.Map(b => b.Percentage, "Percentage");
            ...;
        }).AsBag().Cascade.AllDeleteOrphan().Not.LazyLoad()

当我从数据库中获取所有classA元素时,它会加载ClassBList中的所有ClassB,但它不会在ClassB中加载ClassC元素。

我尝试了以下HQL:

                var query = session.CreateQuery("select a from ClassA as a left join fetch  a.ClassBList as b left join fetch b.CEntity as c");

            classAList = query.List<ClassA>();

但是我收到了这个错误:

  

异常= {“查询指定的连接提取,但选择列表中不存在获取的关联的所有者[FromElement {显式,不是集合连接,获取连接,获取非延迟属性,classAlias = c,角色=,表名= ClassCTable,tableAlias = classc2_,或...

我认为这是因为我试图加载classB的ClassC元素,但是classB不在选择列表中。

替代方案或正确的HQL是什么?

注意:由于this问题,我无法使用条件:

1 个答案:

答案 0 :(得分:0)

如果问题是通过一个复杂的关联来加载,那就是跨越3个实体,也许this博客帖子会有帮助