NHibernate:在HQL中返回一个常量

时间:2009-04-09 16:01:32

标签: nhibernate hql

我需要从NHIbernate中的HQL查询返回一个常量

SELECT new NDI.SomeQueryItem(user, account, " + someNumber + ") 
FROM NDI.SomeObject object

我正在尝试上面这样的事情。我试过这个:

SELECT new NDI.SomeQueryItem(user, account, :someNumber) 
FROM NDI.SomeObject object

然后是:

.SetParameter("someNumber", 1).List<SomeQueryItem>();

但是在第一种情况下,我得到了一个'Undefined alias或unknown mapping 1'。这有点意义,因为它可能认为1是别名。

对于第二个,我得到一个'未定义的别名或未知的映射:someNumber',如果它从未设置参数,它再次有意义。

我必须相信有一些方法可以做到这一点。

2 个答案:

答案 0 :(得分:2)

请随时继续相信有一些方法可以做到这一点 - 但是使用HQL却没有!

你为什么要这么做?如果要将此属性的值更新为指定的值,请在加载对象后执行此操作。或者,如果您的结果集与您的对象不完全匹配,您可以使用SQL查询(您仍然可以通过NHibernate会话执行)。但是NHibernate的目的是将数据库中的内容映射到对象上,因此指定像这样的手动覆盖是不正确的。

答案 1 :(得分:1)

听起来您的域对象和数据库模型之间存在(小?)断开连接。如何创建一个小的“DTO”对象来弥补这个差距呢?

让您的查询返回SomeQueryItemDTO(或任何您想要调用它)的列表,由于命名,您知道它不是您域的真正部分。然后有一些函数来处理列表并通过合并与数据库无关的数据来构建真正的SomeQueryItem对象的列表。

如果您已经在使用存储库模式,那么这应该更容易,因为所有丑陋的细节都隐藏在您的存储库中。