2014-01-21 50 views
2

我試圖運行涉及在JDBC自定義變量向一個MySQL 5.0數據庫(休眠4作爲ORM)的查詢:如何在包含變量賦值的jdbc的mysql查詢中轉義冒號(:):

SET @rownum := 0; SELECT rnum FROM (
    SELECT (@rownum := @rownum + 1) AS rnum, col_name_a 
    FROM table_name 
    WHERE (col_name_b IS NULL OR col_name_b != 'USER') ORDER BY col_name_a) c 
WHERE col_name_a = :aValue 

第一SET @rownum := 0;需要重置變量,但結腸(我已經設置了allowMutilQuery = true,如在this question中建議的那樣)。

問題是與以下SELECT,在那裏我不斷獲取:

org.hibernate.QueryException:空格後的參數前綴是不允許的「:」

是否有辦法在這附近?我應該使用其他方法比

javax.persistence.Query q = EntityManager instance>.createNativequery(String) 

q.setParameter(<param name>, <param value>) 

回答

5

在冬眠結腸:逃逸與反斜線完成:

SET @rownum \:= 0; SELECT rnum FROM (... 

或者在Java中:

String sql = "SET @rownum \\:= 0; SELECT rnum FROM (..."; 
+0

太好了!你知道這是否與ORM無關? – watery

+0

我不知道JPA查詢語言jpql中的任何標準。參數定義冒號+標識符不需要轉義冒號。但是知道,我從未遇到過這個問題。 –

+0

@Joop Eggen在存儲過程的情況下也可以工作,'lp_dyn:LOOP'我在動態存儲過程中必須寫入,但當我用'//'將其轉義時,會出現錯誤 – rd22

相關問題