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


