好吧,我最后使用存储过程(是的,我最初不想要的)来创建动态查询(我不认为这是可能的).
这是我的代码:
存储过程:
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();