Trochu opožděná odpověď, ale může být užitečná, takže ji zveřejním. Měl úplně stejný problém a bolela ho hlava, abych to vystopoval. Řešením je použít org.hibernate.dialect.SQLServer2012Dialect
který je součástí Hibernate 4.3.0. Vygenerovaný dotaz se stane (vložením skutečného výpisu stavu spánku bez názvů sloupců a aliasů):
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__ < ?
Všimněte si použití vnitřního dotazu a Row_number()
funkce. Konečně to vyřešili!