SpringBoot+MySQL中带Pageable的Native Query报'H列不存在'求助
解决Spring Boot JPA原生查询分页时的Unknown column 'H'错误
问题原因
在原生查询中使用Pageable参数时,Spring Data JPA会自动生成对应的count查询来统计总记录数,但自动生成的count查询会错误地引用主查询里的表别名H,导致抛出Unknown column 'H' in 'field list'错误。而去掉Pageable后不需要执行count查询,主查询本身的别名是有效的,因此能正常运行。
解决方案
手动指定count查询,避免JPA自动生成错误的count语句。修改后的DAO接口代码如下:
public interface IHouseDao extends JpaRepository<House, String> { @Query(value = "SELECT H.*, (4) AS distance FROM house H", countQuery = "SELECT COUNT(H.id) FROM house H", nativeQuery = true) Page<House> search(Pageable pageable); }
说明
countQuery参数单独指定了统计记录数的查询语句,直接基于表house的主键统计数量,不会涉及主查询中的额外字段(比如distance),确保count查询能正确执行。- 主查询保持原有逻辑,依然可以返回包含
distance字段的结果,同时完美支持分页功能。
内容的提问来源于stack exchange,提问作者mateo cunha
相关产品推荐
相关产品推荐

