Réponse un peu tardive, mais ça peut être utile donc je vais la poster. J'ai eu exactement le même problème et un mal de tête pour le retrouver. La solution consiste à utiliser org.hibernate.dialect.SQLServer2012Dialect
qui est inclus dans Hibernate 4.3.0. La requête générée devient (en collant le vrai vidage Hibernate sans noms de colonnes ni 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__ < ?
Notez l'utilisation de la requête interne et de Row_number()
fonction. Ils l'ont finalement résolu !