2010-12-21 127 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