H2数据库SQL语法错误求助:JPQL分页查询报limit语法错误
问题分析与解决
你的问题根源在于H2数据库的语法兼容配置:Spring Data JPA结合Pageable自动生成了带LIMIT的SQL语句,但当前H2实例的运行模式不支持这种MySQL风格的分页语法,因此触发语法错误。
具体解决方法
启用H2的MySQL兼容模式(推荐)
修改你的H2数据库连接URL,添加;MODE=MySQL参数,示例配置如下:jdbc:h2:mem:your-db-name;MODE=MySQL;DB_CLOSE_DELAY=-1开启该模式后,H2会兼容MySQL的语法规则,Spring Data JPA自动生成的带
LIMIT的分页SQL就能正常执行。备选:使用H2标准分页语法(需手动适配)
如果不想切换兼容模式,可以改用H2支持的SQL标准分页写法,但需要将JPQL改为原生SQL查询并手动处理分页参数:@Query(value = "SELECT t.code FROM test t OFFSET ?1 ROWS FETCH NEXT ?2 ROWS ONLY", nativeQuery = true) Page<String> test(int offset, int pageSize);这种方式需要自行转换
Pageable中的偏移量和每页数量,不如第一种方案便捷。
内容的提问来源于stack exchange,提问作者Kaker
相关产品推荐
相关产品推荐

