首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Hibernate SQL Server 分頁報錯:UNION 查詢 ORDER BY 子查詢無效

     編輯:程式設計綜合問答

錯誤:ORDER BY 子句在視圖、內聯函數、派生表、子查詢和公用表表達式中無效。

原因

Hibernate 分頁機制將原 SQL 包裹為子查詢:
SELECT * FROM (原SQL) AS t,SQL Server 禁止子查詢中帶 ORDER BY(除非配合 TOP/OFFSET)。

解決方案

  1. 原 SQL 移除 ORDER BY,改用 Hibernate Criteria 或 HQL ORDER BY 由框架生成正確分頁 SQL。
  2. 或手寫原生 SQL 使用 OFFSET ... ROWS FETCH NEXT ... ROWS ONLY (SQL Server 2012+)。
  3. 重構邏輯:將 UNION 兩部分拆分為兩次查詢,應用層合併排序分頁(數據量可控時)。

核心:避免在傳給 Hibernate 分頁的原生 SQL 中包含 ORDER BY。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved