【问题标题】:SQL Query in NHibernate dictionNHibernate 字典中的 SQL 查询
【发布时间】:2010-05-27 13:58:20
【问题描述】:

我有一个在 SQL Management Studio 中工作的 SQL 查询:

选择 ID 从表 t 其中 t.Date= (选择最大(日期) 从 ( 选择 * 从表中 ReferenceId = xy) u)

原因是,从具有特定外键的所有条目中,我想收到带有 最高日期。

我尝试修改此查询以在 NHibernate 中使用,但我得到了

IQuery query = session.CreateQuery(String.Format(
            @"Select t.Id  
            From table t
            Where t.Date =
                (Select Max(Date)
                From (Select * 
                      From table t where t.ReferenceItem.Id = " + item.ReferenceItem.Id + ")u)"));

我收到错误消息:“在预期中”

我必须如何形成 NHibernate 查询? “在”是什么意思?

【问题讨论】:

    标签: sql nhibernate


    【解决方案1】:

    要执行 SQL 查询,您必须使用CreateSQLQuery 而不是CreateQuery

    后者创建 HQL 查询。

    【讨论】:

    • +1 我什至没有注意查询所以我做出了错误的假设
    【解决方案2】:

    “在预期中”表示映射和尝试运行的查询不匹配。

    HQL 查询需要标记,因为它们映射到您的类。因此,它们的 SQL 功能非常有限:它们只允许所选方言允许的内容。

    【讨论】:

      【解决方案3】:

      您应该验证您的映射文件属性以查看您是否使用嵌入式资源,否则,您将不断收到此错误

      【讨论】:

        【解决方案4】:

        好的,我可以正确构建查询,应该是

        "Select t.Id  
                    From table t
                    Where t.Date =
                        (Select Max(u.Date)
                        From table u where u.ReferenceItem.Id = " + item.ReferenceItem.Id + ")"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-12
          • 2020-08-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-23
          相关资源
          最近更新 更多