我需要在Hibernate中使用带有变量的本地SQL查询。
但是hibernate抛出错误信息:参数前缀后不允许有空格
因此,与:= mysql变量分配和hibernate变量分配存在冲突。
这是我的SQL查询:
SET @rank:=0; UPDATE Rank SET rank_Level=@rank:=@rank+1 ORDER BY Level;
hibernate代码(jpa语法):
Query query = em.createNativeQuery(theQuery); query.executeUpdate();
我无法使用存储过程,因为我的SQL查询是动态生成的(“ Level”可以是“ int”或“ force” …)
我怎样才能做到这一点 ?
谢谢
好吧,我最终使用存储过程(是的,我最初不想要的)来创建动态查询(我认为不可能)。
这是我的代码:存储过程:
DELIMITER | DROP PROCEDURE IF EXISTS UpdateRank | CREATE PROCEDURE UpdateRank(IN shortcut varchar(30)) BEGIN SET @rank=0; SET @query=CONCAT('UPDATE Rank SET ', shortcut, '=@rank:=@rank+1 ORDER BY ', shortcut); PREPARE q1 FROM @query; EXECUTE q1; DEALLOCATE PREPARE q1; END; | DELIMITER ;
技巧是使用CONCAT函数在存储过程中动态创建查询。
然后,在经典的hibernate函数中调用该过程:
Query q = em.createNativeQuery("CALL updateRank('lvl')"); q.executeUpdate();