6

我正在尝试通过 JDBC 向 MySQL 5.0 数据库(作为 ORM 的 Hibernate 4)运行涉及自定义变量的查询:

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

问题出在以下SELECT,我不断得到:

org.hibernate.QueryException:参数前缀“:”后不允许有空格

有没有解决的办法?我应该使用其他方法吗

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

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

?

4

1 回答 1

8

在休眠中,冒号的转义:是用反斜杠完成的:

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

或者在java中:

String sql = "SET @rownum \\:= 0; SELECT rnum FROM ( ...";
于 2014-01-21T16:36:27.437 回答