我有一個奇怪的情況,如果我將頁面大小設定為小于結果的總大小,則會出錯。
在我的 repo 中,有一個包含在 WITH 中的巨大查詢以保持簡單,所以應該在那里進行分頁(我還在引號內重命名了一些欄位,除非它們被嵌套,否則 jpa 找不到它們),如下所示:
回購:
String QRY_DATA = "WITH result AS (<ton of code>) SELECT * FROM result";
@Query(nativeQuery = true, value = QRY_DATA)
Page<IBusinessDataDto> getData(UUID userId, Pageable pageable);
服務:
...
Pageable pageable = PageRequest.of(page - 1, pageSize, Sort.Direction.ASC, "businessId");
Page<IBusinessDataDto> test = repository.getData(userId, pageable);
...
我已經測驗了代碼之外的查詢,它可以正常作業并回傳 2 個結果,如果我將 'pageSize' 設定為 3,它在代碼中完美運行,但是如果我將它設定為 2 或 1,我會收到一個錯誤:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "FROM"
我嘗試列印飛路 SQL,我得到以下資訊:
Hibernate: WITH result AS (...) SELECT * FROM result order by businessId asc limit ?
Hibernate: WITH result AS (...) SELECT * FROM result
2021-11-11 15:58:48.108 WARN 17088 --- [nio-8091-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 42601
2021-11-11 15:58:48.108 ERROR 17088 --- [nio-8091-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: syntax error at or near "FROM"
Position: 1006
我不知道為什么這很重要或問題是什么,請指教。
uj5u.com熱心網友回復:
分頁通過發出計數查詢來作業,該查詢在您的代碼中缺失。
String QRY_DATA = "WITH result AS (<ton of code>) SELECT * FROM result";
String QRY_DATA_COUNT = "WITH result AS (<ton of code>) SELECT COUNT(*) FROM result";
@Query(nativeQuery = true, value = QRY_DATA, countQuery = QRY_DATA_COUNT)
Page<IBusinessDataDto> getData(UUID userId, Pageable pageable);
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.at-query.native
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/356341.html
