Spring Data Native query pagination not working

Sud*_*kya 0 java mysql native-sql spring-data spring-boot

I am using Spring Boot 2.0.2.RELEASE with Spring Data JPA. I am trying to do implement pagination with native query in MySql, my code is :

@Query(nativeQuery=true, value = "SELECT DISTINCT ud.latitude,ud.longitude,u.user_id userId FROM users u \n" +
            "INNER JOIN user_devices ud ON u.id = ud.user_id\n" +
            "WHERE ud.access_token IS NOT NULL AND ud.user_id <> 1\n" +
            "ORDER BY calculateDistanceByLatLong(:userLat, :userLong, ud.latitude, ud.longitude) ASC \n#pageable\n",
            countQuery = "SELECT COUNT(DISTINCT u.id) FROM users u \n" +
                    "INNER JOIN user_devices ud ON u.id = ud.user_id\n" +
            "WHERE ud.access_token IS NOT NULL AND ud.user_id <> 1 \n#pageable\n")
    public Page<LocationProjection> listNearByUsers(@Param("userLat")String userLatitude,@Param("userLong") String userLongitude, Pageable pageable) throws Exception;
Run Code Online (Sandbox Code Playgroud)

I got the reference from this link.

And also reviewed this link.

But it's not adding any pagination code. When I try to use :

userDao.listNearByUsers(userDeviceEntity.getLatitude(),userDeviceEntity.getLongitude(), PageRequest.of(pageNo, maxResults))
Run Code Online (Sandbox Code Playgroud)

And for example set pageNo=0 and maxResults =1,all the results are displayed. So no pagination is being implemented. I printed the fired query, it is :

SELECT
DISTINCT ud.latitude,
ud.longitude,
u.user_id userId 
FROM
users u  
INNER JOIN
user_devices ud 
ON u.id = ud.user_id 
WHERE
ud.access_token IS NOT NULL 
AND ud.user_id <> 1 
ORDER BY
calculateDistanceByLatLong(?,
?,
ud.latitude,
ud.longitude) ASC  #pageable
Run Code Online (Sandbox Code Playgroud)

And the count query as :

SELECT
COUNT(DISTINCT u.id) 
FROM
users u  
INNER JOIN
user_devices ud 
ON u.id = ud.user_id 
WHERE
ud.access_token IS NOT NULL 
AND ud.user_id <> 1  #pageable 
Run Code Online (Sandbox Code Playgroud)

I thought Spring Data would add "LIMIT 0,1" in the main query but it's not working. The DAO interface is :

@Repository
public interface UserDao extends JpaRepository<UserEntity, Integer>{}
Run Code Online (Sandbox Code Playgroud)

Please suggest some solution.

ade*_*izu 8

在这里检查了几个 Q/A 之后,没有一个正常工作(至少对于我的设置)。在 Spring 官方文档中阅读了这一点后,我设法通过简单地从我的查询中删除“可分页”位来使其工作。

我正在使用 spring-boot 版本 2.0.1.RELEASE。

public interface UserRepository extends JpaRepository<User, Long> {

  @Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
    countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
    nativeQuery = true)
  Page<User> findByLastname(String lastname, Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)