假设我们有这个实体结构:
Document
- DocumentA
- DocumentB
在基类文档中,我们有字段 ID ,名称, CreateDate 。在连接的子类DocumentA中,我们有字段 Book , Pages 。在DocumentB中,我们有杂志,页面。
所以问题是当我尝试使用Criteria获取记录时:
var prj = Projections.ProjectionList();
foreach (var col in selectColumns)
{
prj.Add(Projections.Property(col), col);
}
criteria.SetProjection(prj).SetResultTransformer(new AliasToBeanResultTransformer(entityType));
因此,如果我们在 selectColumns 中有两个页面列,NHibernate将只从第一个列中选择数据。实际上它甚至会像这样生成SQL查询
SELECT top 15
this_1_.Pages as y0_
, this_1_.Pages as y1_
, this_.CreationDate as y2_
, this_.CreationAuthor as y3_
, this_.Name as y4_
, this_.Id as y5_
FROM Document this_
left outer join DocumentA this_1_ on this_.Id=this_1_.Id
left outer join DocumentB this_2_ on this_.Id=this_2_.Id
有没有人知道如何使用Criteria解决我的问题? BTW我没有选择更改这个结构,在这个系统中用户可以定义自己的类和嵌套类。