NHibernate 使用条件连接多个子类和重复列名

发布于 2024-12-29 08:37:58 字数 1100 浏览 1 评论 0原文

假设我们有这样的实体结构:

Document
- DocumentA
- DocumentB

在基类 Document 中,我们有字段 IdNameCreateDate。在连接的子类 DocumentA 中,我们有字段 BookPages。在 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 中有两个 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 解决我的问题?顺便说一句,我没有选择更改此结构,在这个系统中用户可以定义自己的类和嵌套类。

Assume we have this entity structure:

Document
- DocumentA
- DocumentB

In base class Document we have fields Id, Name, CreateDate. In joined subclass DocumentA we have fields Book, Pages. And in DocumentB we have Magazine, Pages.

So the problem is when i try to get records with Criteria:

var prj = Projections.ProjectionList();
foreach (var col in selectColumns)
{
    prj.Add(Projections.Property(col), col);
}
criteria.SetProjection(prj).SetResultTransformer(new AliasToBeanResultTransformer(entityType));

So if we have in selectColumns two Pages columns NHibernate will only select data from first one. In fact it even generates SQL query like this

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 

Does anyone know how to solve my problem using Criteria? BTW I do not have option to change this structure, in this system user can define his own classes and nested classes.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文