Малко късен отговор, но може да бъде полезен, така че ще го публикувам. Имах точно същия проблем и главоболие, за да го проследя. Решението е да използвате org.hibernate.dialect.SQLServer2012Dialect
който е включен в Hibernate 4.3.0. Генерираната заявка става (поставяне на реално дъмп на Hibernate без имена на колони и псевдоними):
WITH query
AS (SELECT inner_query.*,
Row_number()
OVER (
ORDER BY CURRENT_TIMESTAMP) AS __hibernate_row_nr__
FROM (SELECT TOP(?) <COLUMN_NAMES> AS <ALIASES>
FROM <TABLE_NAME>
) inner_query)
SELECT <ALIASES>
FROM query
WHERE __hibernate_row_nr__ >= ?
AND __hibernate_row_nr__ < ?
Обърнете внимание на използването на вътрешна заявка и Row_number()
функция. Най-накрая го решиха!