如何在 Hibernate 中使用 Mysql 变量?

Jer*_*nce 3 mysql variables hibernate conflict

我需要在 Hibernate 中使用本机 sql 查询并使用变量。

但是hibernate抛出一个错误说:参数前缀后不允许有空格

所以:= mysql变量赋值和hibernate变量赋值有冲突。

这是我的sql查询:

SET @rank:=0; 
UPDATE Rank SET rank_Level=@rank:=@rank+1 ORDER BY Level;
Run Code Online (Sandbox Code Playgroud)

hibernate代码(jpa语法):

Query query = em.createNativeQuery(theQuery);
query.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

我无法使用存储过程,因为我的 sql 查询是动态生成的(“Level”可以是“int”或“force”...)

我怎样才能做到这一点 ?

谢谢

Jer*_*nce 5

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

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

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 ;
Run Code Online (Sandbox Code Playgroud)

技巧是使用 CONCAT 函数在存储过程中动态创建查询。

然后,调用经典hibernate函数中的过程:

Query q = em.createNativeQuery("CALL updateRank('lvl')");
q.executeUpdate();
Run Code Online (Sandbox Code Playgroud)