Eine etwas späte Antwort, aber es kann hilfreich sein, also werde ich es posten. Hatte genau das gleiche Problem und Kopfschmerzen, um es aufzuspüren. Die Lösung besteht darin, org.hibernate.dialect.SQLServer2012Dialect
zu verwenden das in Hibernate 4.3.0 enthalten ist. Die generierte Abfrage wird (einfügen eines echten Hibernate-Dumps ohne Spaltennamen und Aliase):
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__ < ?
Beachten Sie die Verwendung der inneren Abfrage und Row_number()
Funktion. Sie haben es endlich gelöst!