假设我们有这个实体结构:
Document
- DocumentA
- DocumentB
在基类 Document 中,我们有字段Id、Name、CreateDate。在加入的子类 DocumentA 中,我们有字段Book,Pages。在 DocumentB 中,我们有Magazine、Pages。
所以问题是当我尝试使用标准获取记录时:
var prj = Projections.ProjectionList();
foreach (var col in selectColumns)
{
prj.Add(Projections.Property(col), col);
}
criteria.SetProjection(prj).SetResultTransformer(new AliasToBeanResultTransformer(entityType));
因此,如果我们在selectColumns中有两个Pages列,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 解决我的问题?顺便说一句,我没有选择更改此结构的选项,在此系统中,用户可以定义自己的类和嵌套类。