2014-01-21 22 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

相关问题