HQl相当于sql查询

时间:2010-12-21 08:56:14

标签: hibernate hql

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,其中U.pageType = 2 group by U.pageId having count( U.pageId)= 1)]

3 个答案:

答案 0 :(得分:0)

你也可以在hql中使用group by和having以及子查询。

一些例子:

link text

答案 1 :(得分:0)

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

无论如何,方法createSQLQuery(queryString)以SQL语言运行查询。

答案 2 :(得分:0)

在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()