Ну, наконец, я использую хранимую процедуру (да, то, что я не хочу изначально) для создания динамического запроса (я не думаю, что это возможно).
Вот мой код:
Хранимая процедура:
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 для динамического создания запроса в хранимой процедуре.
Затем вызовите процедуру в классической функции гибернации:
Query q = em.createNativeQuery("CALL updateRank('lvl')");
q.executeUpdate();