【问题标题】:NHibernate - problem with eager loadingNHibernate - 急切加载的问题
【发布时间】:2010-01-11 12:01:45
【问题描述】:

我有一个包含许多 ClassB 元素的 ClassA:

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>();

但我收到此错误:

Exception = {"查询指定连接获取,但获取关联的所有者不在选择列表中 [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=c,role =,tableName=ClassCTable,tableAlias=classc2_,or...

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

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

注意:由于this 问题,我无法使用标准:

【问题讨论】:

    标签: nhibernate hql


    【解决方案1】:

    如果问题是通过跨越 3 个实体的复杂关联进行预加载,那么 this 博客文章可能会有所帮助

    【讨论】:

      猜你喜欢
      • 2017-09-28
      • 2017-10-19
      • 1970-01-01
      • 2021-01-16
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多