2010-08-30 73 views
2

额外的数据我正在写一个HQL查询,在形式:返回从HQL

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

我从该查询返回a类型的实体。但是,我还需要知道exists子句在我的代码中是否恢复正确。如果这是SQL,我会将它粘贴到选择列表中。然而,即使我添加到HQL选择条款,使之成为:

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

在我的代码我现在有观看无类型的数据,或查看a类型的类型实体和扔掉我的价值x之间进行选择那回来了。

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

回答

3

你有两个选择这里,因为我看到它:

1)添加附加属性为只读映射属性设置为你的实体,利用该formula映射使用内联SQL或导出值UDF。

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

你走哪条路线真的取决于你,但我倾向于倾向于选项#2,以免污染你的领域模型与不需要的领域。

+0

我去了'aliastobeanresulttransformer'路线。但是,我需要使用用户类型(IUserType)来映射其中一列。有没有办法做到这一点? – 2010-09-05 02:27:43

+0

它应该无缝工作;只需使用hql选择IUserType相关的属性;它应该像您选择正规实体一样进行处理。 – DanP 2010-09-05 17:47:03

+1

* aliastobeanresulttransformer *!我希望我们能够抛弃nhibernate这个疯狂的术语。 – UpTheCreek 2011-08-21 12:38:43