spring数据本机查询分页不起作用

wtlkbnrh  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(370)

我正在使用springboot2.0.2.release和springdatajpa。我正在尝试在mysql中使用本机查询实现分页,我的代码是:

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

我从这个链接得到了参考资料。
并回顾了这个环节。
但它没有添加任何分页代码。当我尝试使用:

  1. userDao.listNearByUsers(userDeviceEntity.getLatitude(),userDeviceEntity.getLongitude(), PageRequest.of(pageNo, maxResults))

例如,设置pageno=0和maxresults=1,所有结果都会显示出来。所以没有实现分页。我打印了被解雇的查询,它是:

  1. SELECT
  2. DISTINCT ud.latitude,
  3. ud.longitude,
  4. u.user_id userId
  5. FROM
  6. users u
  7. INNER JOIN
  8. user_devices ud
  9. ON u.id = ud.user_id
  10. WHERE
  11. ud.access_token IS NOT NULL
  12. AND ud.user_id <> 1
  13. ORDER BY
  14. calculateDistanceByLatLong(?,
  15. ?,
  16. ud.latitude,
  17. ud.longitude) ASC #pageable

将查询计数为:

  1. SELECT
  2. COUNT(DISTINCT u.id)
  3. FROM
  4. users u
  5. INNER JOIN
  6. user_devices ud
  7. ON u.id = ud.user_id
  8. WHERE
  9. ud.access_token IS NOT NULL
  10. AND ud.user_id <> 1 #pageable

我以为spring数据会在主查询中添加“limit0,1”,但它不起作用。dao接口是:

  1. @Repository
  2. public interface UserDao extends JpaRepository<UserEntity, Integer>{}

请提出一些解决办法。

okxuctiv

okxuctiv1#

在这里经过几个问答之后,没有一个能正常工作(至少对我的设置是这样)。在spring官方文档中阅读了这一部分之后,我只需从查询中删除“pageable”部分,就可以让它正常工作。
我正在使用springboot2.0.1.release版本。

  1. public interface UserRepository extends JpaRepository<User, Long> {
  2. @Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
  3. countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
  4. nativeQuery = true)
  5. Page<User> findByLastname(String lastname, Pageable pageable);
  6. }

相关问题