我有一个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问题,我无法使用条件: