NHibernate的 - 与预先加载
问题描述:
问题我已经有很多ClassB的元素ClassA的:NHibernate的 - 与预先加载
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元素时,它将ClassBi中的所有ClassB st加载,但它不会加载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 = {"Query specified join fetching, but the owner of the fetched association was not present in the select list [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问题的标准:如果问题通过复杂的关联,跨越3个实体是急于负载