Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Paginação do lado do servidor do Hibernate (/JPA) e MS SQL Server


Resposta um pouco atrasada, mas pode ser útil, então vou postar. Tive exatamente o mesmo problema e uma dor de cabeça para rastreá-lo. A solução é usar org.hibernate.dialect.SQLServer2012Dialect que está incluído no Hibernate 4.3.0. A consulta gerada se torna (colando o dump real do Hibernate sem nomes de coluna e aliases):
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 o uso de consulta interna e Row_number() função. Finalmente resolveram!