生成的JPA Repository Pageable查询中出现MySQL语法错误:靠近'偏移x行仅获取前y行'

kxeu7u2r  于 2023-08-06  发布在  Mysql
关注(0)|答案(1)|浏览(176)

我试图通过Sping Boot JPA Repository从我的表中获取一些行,但MySQL在JPA生成的查询中一直显示语法错误。
MySQL似乎只支持limit y offset x,而不是offset x rows fetch first y rows only(我正在测试第一个页面,page: 0page_size: 1

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 'offset 0 rows fetch first 1 rows only' at line 1

字符串
这是我的仓库

@Repository
public interface MyRepository extends JpaRepository<MyEntity, Integer> {
    ArrayList<MyEntity> findById(Integer id, Pageable pageable);
}


以及JPA生成的查询

select ... from myTable c1_0 order by c1_0.id desc offset 0 rows fetch first 1 rows only


也许,我仍然在使用JDBC驱动程序的SQL
下面是pom.xml文件中的一个部分

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.33</version>
</dependency>


这里是application.properties

spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.database=mysql


我怎么才能摆脱这个?

zpgglvta

zpgglvta1#

问题是我的项目正在使用来自Spring云配置服务器的配置。
spring.jpa.properties.hibernate.dialect配置值为org.hibernate.dialect.H2Dialect。这就是为什么JPA不断生成不能完全与MySQL一起使用的SQL查询的原因(在我的例子中:offsetlimit)。
使用VM选项将它改回org.hibernate.dialect.MySQLDialect解决了我的问题。

相关问题