Een beetje late reactie, maar het kan nuttig zijn, dus ik zal het posten. Had precies hetzelfde probleem en hoofdpijn om het op te sporen. Oplossing is om org.hibernate.dialect.SQLServer2012Dialect
te gebruiken die is opgenomen in Hibernate 4.3.0. Gegenereerde query wordt (echte slaapstand-dump plakken zonder kolomnamen en aliassen):
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__ < ?
Let op het gebruik van inner query en Row_number()
functie. Ze hebben het eindelijk opgelost!