今天为研发改写了一个巨复杂的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模式即可