2010-12-21 96 views
0
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); 

我得到一个错误HQL相当于SQL查询的

org.hibernate.hql.ast.QuerySyntaxException:意外的标记:(从附近的1号线,列23 SELECT COUNT()(SELECT * FROM地址当U其中U.pageType = 2基团由具有计数U.pageId(U.pageId)= 1)]

+0

要格式化源代码,编辑器中有{}按钮;) – bluish 2010-12-21 09:47:15

回答

0

您可以通过,并具有和子查询中HQL以及使用组

一些例子:

link text

0

作为HQL代码,您的查询似乎没有问题。请注意实体的大写字母:例如,豆类中的url可能为Url

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

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

+0

上述查询的工作原理,但那不是我所需要的..我需要一个确切的等效于下面的SQL查询在HQL中:我明白我不能使用子查询从子句,但只是想知道是否有一个工作周围下面.............. select count(*)from(select * from Url where page_type = 2 group by page_id having(count( page_id)= 1)) – Ananth 2010-12-21 20:00:03

+0

@kash:已更新。 – axtavt 2010-12-21 20:19:54