Phản hồi hơi muộn một chút, nhưng nó có thể hữu ích nên tôi sẽ đăng nó. Gặp phải vấn đề chính xác và đau đầu để theo dõi nó. Giải pháp là sử dụng org.hibernate.dialect.SQLServer2012Dialect
được bao gồm trong Hibernate 4.3.0. Truy vấn đã tạo sẽ trở thành (dán kết xuất Hibernate thực không có tên cột và bí danh):
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__ < ?
Lưu ý việc sử dụng truy vấn bên trong và Row_number()
hàm số. Cuối cùng họ đã giải quyết nó!