代码之家  ›  专栏  ›  技术社区  ›  Programmin Tool

nhibernate:返回hql中的常量

  •  1
  • Programmin Tool  · 技术社区  · 15 年前

    我需要从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”,如果它从未设置过参数,这也是有意义的。

    我必须相信有办法做到这一点。

    2 回复  |  直到 15 年前
        1
  •  2
  •   David M    15 年前

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

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

        2
  •  1
  •   Stuart Childs    15 年前

    听起来好像有一个(小?)断开域对象和数据库模型之间的连接。如何创建一个小的“dto”对象来填补这个空白?

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

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