Chà, cuối cùng tôi đã sử dụng thủ tục được lưu trữ (vâng, điều tôi không muốn ban đầu) để tạo truy vấn động (tôi không nghĩ là có thể).
Đây là mã của tôi:Quy trình được lưu trữ:
DELIMITER |
DROP PROCEDURE IF EXISTS UpdateRank |
CREATE PROCEDURE UpdateRank(IN shortcut varchar(30))
BEGIN
SET @rank=0;
SET @query=CONCAT('UPDATE Rank SET ', shortcut, '[email protected]:[email protected]+1 ORDER BY ', shortcut);
PREPARE q1 FROM @query;
EXECUTE q1;
DEALLOCATE PREPARE q1;
END;
|
DELIMITER ;
Mẹo là sử dụng hàm CONCAT để tạo động một truy vấn trong thủ tục được lưu trữ.
Sau đó, gọi thủ tục trong hàm hibernate cổ điển:
Query q = em.createNativeQuery("CALL updateRank('lvl')");
q.executeUpdate();