【问题标题】:HQl equivalent of sql queryHQl 相当于 sql 查询
【发布时间】:2011-05-28 17:04:35
【问题描述】:
String SQL_QUERY = "SELECT count(*) FROM (SELECT * FROM Url as U where U.pageType=" + 1 + " group  by U.pageId having count(U.pageId) = 1)";
query = session.createQuery(SQL_QUERY);

我遇到了一个错误

org.hibernate.hql.ast.QuerySyntaxException:意外令牌:(在第 1 行附近,第 23 列 [SELECT count() FROM (SELECT * FROM Url as U where U.pageType = 2 group by U.pageId 有 count( U.pageId) = 1)]

【问题讨论】:

  • 要格式化源代码,编辑器中有 {} 按钮 ;)

标签: hibernate hql


【解决方案1】:

您也可以在 hql 中使用 group by 和 having 和 subqueries。

一些例子:

link text

【讨论】:

    【解决方案2】:

    您的查询似乎可以作为 HQL 代码。注意实体的大写字母:例如,您的 bean 类中的 url 可以是 Url

    反正有createSQLQuery(queryString) 方法可以用SQL 语言运行查询。

    【讨论】:

      【解决方案3】:

      在 HQL 中,您不能在 FROM 子句中使用子查询。

      在这种特殊情况下(使用having count(U.pageId) = 1),以下查询应该会产生相同的结果(尽管我不确定性能):

      SELECT count(u) FROM Url u WHERE u.pageType = 2 AND
          1 = (SELECT count(uu) FROM Url uu WHERE u.pageId = uu.pageId)
      

      如果不合适,可以使用session.createSQLQuery()

      【讨论】:

      • 上述查询有效,但这不是我需要的。我需要一个与 Hql 中的以下 sql 查询完全相同的查询:我知道我不能在 from 子句中使用子查询,但只是想知道是否有工作围绕以下....... select count(*) from (select * from Url where page_type = 2 group by page_id with (count(page_id) =1))
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      相关资源
      最近更新 更多