NHibernate:使用Criteria API加载没有父属性的子集合

时间:2013-04-16 10:44:38

标签: .net nhibernate nhibernate-criteria nhibernate-collections

我的模型基本上就像:

Parent: 
{ 
    Id (Guid), 
    ParentName (String), 
    Children (Set of Child) 
}

Child: 
{ 
    Id (Guid), 
    ParentId (Guid), 
    ChildName (String) 
}

我在实体模式下使用NHibernate并尝试加载子集合而不加载父对象的其他属性。

尝试使用Criteria API:

var criteria = session.CreateCriteria("Parent")
    .Add(Restrictions.Eq("Id", id))
    .SetFetchMode("Children", FetchMode.Eager)
    .SetProjection(Projections.Property("Children"));

但似乎预测对集合没有影响,并且它确实生成了无效的SQL查询,导致异常:

  

NHibernate.Exceptions.GenericADOException未被用户代码
处理   Message =无法执行查询[SELECT this_.Id as y0_ FROM   Parent this_ WHERE this_.Id = @ p0]姓名:cp0 -   值:0effb1c4-a98e-4b10-846c-a1a200eecb11 [SQL:SELECT this_.Id as   y0_ FROM ManagedObject this_ WHERE this_.Id = @ p0] Source = NHibernate   SqlString = SELECT this_.Id as y0_ FROM Parent this_ WHERE   this_.Id = @ p0

内部异常

  

索引超出了数组的范围。

能够使用HQL完成任务:

var q = session.CreateQuery(
 "select c from Parent p inner join p.Children c where p.Id = :id")
 .SetParameter("id", id);

但我仍然感到困惑 - 有没有办法使用Criteria API直接查询Child表?

0 个答案:

没有答案