Jpa使用Page和Pageable分頁遇到的問題及解決
報錯代碼
@Query(value = "select t.* from goods t where t.type =:type ", nativeQuery = true)
Page<Goods> findAllByType(String type,Pageable pageable);報錯信息
org.hibernate.exception.SQLGrammarException: could not extract ResultSet at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptio Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) from Table t where t.type ='A' com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.25.jar:8.0.25] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
分析
看報錯信息得知 是SQL出了問題 并且定位在 near '*)
但是把SQL放到DataGrip里執(zhí)行 發(fā)現(xiàn)可以查出數(shù)據(jù)

那么這是什么原因呢?
經(jīng)過分析Hibernate打印的SQL
select count(t.*) from .....
發(fā)現(xiàn)使用page分頁會有一個查詢所有數(shù)據(jù)的條數(shù)的操作,用于計數(shù)TotalElements

在dataGrip里執(zhí)行SQL

復(fù)刻出了問題
解決方法
把原SQL select t.* from .... 里select t.* 改成select *就可以了。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Security+Spring Data Jpa如何進(jìn)行安全管理
這篇文章主要介紹了Spring Security+Spring Data Jpa如何進(jìn)行安全管理,幫助大家更好的理解和學(xué)習(xí)Spring Security框架,感興趣的朋友可以了解下2020-09-09
MyBatis-Plus?中?typeHandler?的使用實(shí)例詳解
本文介紹了在MyBatis-Plus中如何使用typeHandler處理json格式字段和自定義typeHandler,通過使用JacksonTypeHandler,可以簡單實(shí)現(xiàn)將實(shí)體類字段轉(zhuǎn)換為json格式存儲,感興趣的朋友跟隨小編一起看看吧2024-10-10
關(guān)于JVM垃圾回收的java.lang.ref.Finalizer問題
這篇文章主要介紹了關(guān)于JVM垃圾回收的java.lang.ref.Finalizer問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
MyBatis批量插入的五種方式小結(jié)(MyBatis以集合方式批量新增)
本文主要介紹了MyBatis批量插入的五種方式小結(jié)(MyBatis以集合方式批量新增),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
springboot整合rabbitmq實(shí)現(xiàn)訂單超時取消案例分析
本文介紹了如何使用SpringBoot和RabbitMQ實(shí)現(xiàn)訂單超時取消功能,通過配置TTL隊列和死信交換機(jī),可以管理訂單的超時邏輯,實(shí)際應(yīng)用中,可以通過數(shù)據(jù)庫標(biāo)記訂單狀態(tài)或手動確認(rèn)機(jī)制來防止訂單被錯誤取消2025-01-01
SpringBoot集成Redis實(shí)現(xiàn)消息隊列的方法
這篇文章主要介紹了SpringBoot集成Redis實(shí)現(xiàn)消息隊列的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
Java整合Redis實(shí)現(xiàn)坐標(biāo)附近查詢功能
這篇文章主要介紹了Java整合Redis實(shí)現(xiàn)坐標(biāo)附近查詢,我們可以在redis服務(wù)器使用命令 help xxx 查看指令的具體用法,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2023-11-11

