Sedikit terlambat merespon, tetapi dapat membantu jadi saya akan mempostingnya. Punya masalah yang sama persis dan pusing untuk melacaknya. Solusinya adalah dengan menggunakan org.hibernate.dialect.SQLServer2012Dialect
yang termasuk dalam Hibernate 4.3.0. Kueri yang dihasilkan menjadi (menempelkan dump Hibernate asli tanpa nama kolom dan 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__ < ?
Perhatikan penggunaan inner query dan Row_number()
fungsi. Mereka akhirnya menyelesaikannya!