【发布时间】: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