一尘不染

如何在Hibernate中使用Mysql变量?

hibernate

我需要在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” …)

我怎样才能做到这一点 ?

谢谢


阅读 449

收藏
2020-06-20

共1个答案

一尘不染

好吧,我最终使用存储过程(是的,我最初不想要的)来创建动态查询(我认为不可能)。

这是我的代码:存储过程:

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();
2020-06-20