2

我需要从 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>();

但在第一种情况下,我得到一个“未定义的别名或未知的映射 1”。这是有道理的,因为它可能认为 1 是别名。

第二个我得到一个“未定义的别名或未知的映射:someNumber”,如果它从不设置参数,这又是有意义的。

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

4

2 回答 2

3

请继续相信有一些方法可以做到这一点 - 但 HQL 没有!

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

于 2009-04-09T16:06:06.573 回答
1

听起来您的域对象和数据库模型之间存在(小?)脱节。创建一个小的“DTO”对象来弥补这个差距怎么样?

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

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

于 2009-04-09T16:30:35.143 回答