sql >> Base de Datos >  >> RDS >> Sqlserver

Paginación del lado del servidor de Hibernate (/JPA) y MS SQL Server

Una respuesta un poco tardía, pero puede ser útil, así que la publicaré. Tenía exactamente el mismo problema y un dolor de cabeza para rastrearlo. La solución es usar org.hibernate.dialect.SQLServer2012Dialect que está incluido en Hibernate 4.3.0. La consulta generada se convierte en (pegando el volcado real de Hibernate sin nombres de columna 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__ < ?

Observe el uso de consultas internas y Row_number() función. ¡Al fin lo resolvieron!