java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Jpa使用Page和Pageable分页的问题

Jpa使用Page和Pageable分页遇到的问题及解决

作者:小米粥好好喝

这篇文章主要介绍了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 *就可以了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文