NHibernate:返回HQL中的常量

NHibernate:返回HQL中的常量,nhibernate,hql,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("some

我需要从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>();
.SetParameter(“someNumber”,1).List();
但在第一种情况下,我得到一个“未定义的别名或未知映射1”。这有点道理,因为它可能认为1是一个别名

对于第二个,我得到了一个“未定义的别名或未知映射:someNumber”,如果它从未设置参数,这同样有一定的意义


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

请继续相信有某种方法可以做到这一点,但HQL没有


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

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

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


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

“NHibernate是将数据库中的内容映射到对象”公平点,问题是该值基于数据库外的值,而项的构造函数具有基于该值的逻辑。这几乎就像使用查询传递信息一样。我不会在这个问题上争论对错…如果它是一个NHibernate对象,那么这个项就不能有这样的构造函数逻辑-这就停止了它是NHibernate设计用来处理的那种POCO。我讨厌你在这个问题上一针见血。我认为这个问题可以划为智力自杀。。。公开和残酷。很抱歉让你的希望破灭了。您可以尝试使用对象的中间层,从NHibernate检索POCO列表,然后使用委托使用传递的值实例化您自己的对象来执行.ConvertAll?只是一个想法。