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里执行 发现可以查出数据
那么这是什么原因呢?
经过分析Hibernate打印的SQL
select count(t.*) from .....
发现使用page分页会有一个查询所有数据的条数的操作,用于计数TotalElements
在dataGrip里执行SQL
复刻出了问题
解决方法
把原SQL select t.* from .... 里select t.* 改成select *就可以了。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。