现在的位置: 首页 > 综合 > 正文

hibernate占位符的问题导致无法执行带变量的mysql sql语句

2018年01月21日 ⁄ 综合 ⁄ 共 453字 ⁄ 字号 评论关闭

今天为研发改写了一个巨复杂的sql,因为保密原因就不贴出来了,自觉得意之时开发哥哥抱怨说只能在命令行执行,一旦放程序里就报错(hibernate包装过)

这里给一个简单的sql来做例子:

select a.id ,a.d ,if(@od=a.d,@rank:=@rank+1,@rank:=1) num ,@od:=a.d from (select id ,d from number c order by c.id) as a ,(select @od:=null,@rank:=0 ) as b;   

程序报错如下:

org.hibernate.QueryException: Space is not allowed after parameter prefix ':'

这其实是一个hibernate占位符的问题,解决方式有两种

1,使用createNativeQuery("SELECT @rank \\:= 1, @od
\\:= 2, @a + @b"
);这种类似的方式(依赖于hibernate版本,具体哪个版本忘了)


2,使用hibernate自定义sql模式即可

抱歉!评论已关闭.