【问题标题】:Returning extra data from HQL从 HQL 返回额外数据
【发布时间】:2010-08-30 12:10:57
【问题描述】:

我正在编写 HQL 查询,格式如下:

from a where ... or exists (from b inner join b.c where ...) and ...

我从这个查询中得到了一个a 类型的实体。但是,我还需要知道 exists 子句稍后在我的代码中是否返回为真。如果这是 SQL,我会将其添加到选择列表中。但是,即使我在 HQL 中添加了 select 子句,这样它就变成了:

select a, exists (from b inner join b.c where ...) as x from a where ... or x and ...

在我的代码中,我现在必须在查看非类型化数据或查看类型为 a 的类型化实体并丢弃我的值 x 之间做出选择,然后返回。

有没有办法以某种方式取回输入的数据加上额外的列?

【问题讨论】:

    标签: c# sql database nhibernate hql


    【解决方案1】:

    在我看来,这里有两个选择:

    1) 将附加属性作为只读映射属性添加到您的实体,利用 formula 映射使用内联 sql 或 udf 派生值。

    2) 使用自定义 hql 查询仅获取您需要的数据,并使用 aliastobeanresulttransformer 投影到包含您感兴趣的字段的强类型 dto。

    你走哪条路完全取决于你,但我倾向于选择#2,以免用不需要的字段污染你的域模型。

    【讨论】:

    • 我选择了aliastobeanresulttransformer 路线。但是,我需要使用用户类型 (IUserType) 来映射其中一列。有没有办法做到这一点?
    • 它应该可以无缝工作;只需使用 hql 选择依赖于 IUserType 的属性;应该像选择常规实体一样处理它。
    • aliastobeanresulttransformer!我希望我们可以在 nhibernate 中抛弃一些这种疯狂的术语。
    猜你喜欢
    • 2023-03-09
    • 2018-01-20
    • 2015-06-24
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2018-11-04
    • 2015-05-05
    • 1970-01-01
    相关资源
    最近更新 更多