如何在JPA原生查询中使用':'?

时间:2018-06-04 10:29:38

标签: java mysql jpa spring-data-jpa

我正在做一些数据分析,我有一个SQL查询,使用SELECT ..., @rownum:=@rownum+1 as row_number, ...来获取行号和结果。但是当我把它放到我的JPA方法的原生查询中时(使用Spring Boot / Spring Data JPA),我得到以下异常:

Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: Space is not allowed after parameter prefix ':' 

我已将@Query(nativeQuery = true,添加到我的方法中,并已将参数从where first_name = :firstname更改为where first_name = ?1,并从我的方法参数中删除了@Param注释,但它没有帮助。

有没有办法在此查询中转义冒号,或者其他一些分配不使用冒号的rownum变量的方法?

1 个答案:

答案 0 :(得分:3)

要解决此问题,您需要使用双反斜杠\\:

来转义这两个点
"SELECT ..., @rownum\\:=@rownum+1 as row_number, ... "
                    ^^^