2013-04-22 62 views
0

我想在sql server中運行以下查詢。這是hibernate query它在我的sql中工作。我想在sql server 2005上運行它。我該怎麼做?使用sql server進行concat函數的hibernate查詢

strQuery = "from TempData where englishLex=:englishLex and category =:category and language=:language and login=:login and domain=:domain group by (concat(englishlex,category)) "; 
+0

AFAIK,如果是HQL,它應該是平臺獨立的。 – SJuan76 2013-04-22 10:29:15

+0

但在後臺我使用的是sql server數據庫。 – 2013-04-22 10:42:55

+1

這是無關緊要的 - HQL是獨立於平臺的。 – david99world 2013-04-22 12:50:15

回答

0

concat()是HQL中的有效函數。

它看起來像這樣的情況是不正確的englishLex這是造成問題。

嘗試以下...

strQuery = "from TempData where englishLex=:englishLex and category =:category and language=:language and login=:login and domain=:domain group by (concat(englishLex,category)) "; 
+0

concat函數不能在sql server 2005上工作..我想在sql server 2005上運行它...因爲我們需要使用'+'符號我想。但是如何用它 ??? – 2013-04-22 10:30:52

+0

但你沒有使用sql server 2005,你正在使用hibernate。 Hibernate應該將HQL轉換爲適用於所設計方言的適用SQL。 – SJuan76 2013-04-22 10:35:32

+0

是的先生,但在後臺我正在使用SQL Server數據庫。 我從我的sql到sql server轉移我的項目多數民衆贊成爲什麼它給一個error.so我應該怎麼做? – 2013-04-22 10:37:44

0

在SQL Server中,你沒有concat函數,而不是你可以簡單地使用一個+號。你嘗試過嗎?

strQuery = "from TempData where englishLex=:englishLex and category =:category and language=:language and login=:login and domain=:domain group by (englishlex + category) "; 
+0

是的先生我試過這個,但它給出了一個錯誤,導致:java.sql.SQLException:列'temptable.ID'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。 – 2013-04-22 10:34:21

+0

在這種情況下,我非常樂意使用SQL Server Profiler來查看由ORM生成的許多查詢,並且更好地猜測它如何工作或如何改進生成的查詢。 http://msdn.microsoft.com/en-us/library/ms181091.aspx – Oscar 2013-04-22 19:24:32

0

隨着official manual說,我們可以使用||concat兩個String小號結合起來。

在我的情況下在SQL Server 2012工作:

Query query = currentSession().createQuery("SELECT DISTINCT u FROM UserBean u WHERE CONCAT (u.name, ' ', u.surname) like :fullname"); 

介意UserBean是Java Bean類的名稱,因爲它是在Java代碼中,必須與類名完全相同。