You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JPA查询中获取前10条结果?

解决JPA @Query方法限制结果条数的问题

问题原因

  1. 直接在JPQL语句末尾加LIMIT 10无效,是因为JPQL不支持LIMIT关键字——这是原生SQL的语法,JPQL对应使用setMaxResults()来限制结果数。
  2. 传入PageRequest时出现语法错误,是因为你的方法签名里没有定义Pageable类型的参数,Spring Data JPA会严格匹配方法参数类型,必须先修改方法签名才能传入分页参数。

解决方案

方案1:使用Pageable参数(推荐,跨数据库通用)

修改Repository方法,添加Pageable参数:

// 请根据实际业务逻辑调整JPQL语句
@Query("SELECT n FROM Notification n WHERE n.patientId = :patientId")
List<Notification> findDelivered(@Param("patientId") long patientId, Pageable pageable);

调用方法时,传入PageRequest实例指定取前10条(page从0开始计数):

// 获取目标患者的前10条已推送通知
List<Notification> notifications = notificationRepository.findDelivered(patientId, PageRequest.of(0, 10));

如果不需要分页元数据(比如总条数),直接用List接收结果即可;如果需要完整分页信息,可以返回Page<Notification>或Slice<Notification>类型。

方案2:使用原生SQL(需注意数据库兼容性)

如果坚持用LIMIT语法,可以开启原生SQL查询,在@Query中添加nativeQuery = true:

@Query(value = "SELECT * FROM notification WHERE patient_id = :patientId LIMIT 10", nativeQuery = true)
List<Notification> findDelivered(@Param("patientId") long patientId);

这种方式的缺点是SQL语句依赖具体数据库(比如Oracle需要用ROWNUM,SQL Server用TOP),跨数据库迁移时需要同步修改语句。

内容的提问来源于stack exchange,提问作者Flarosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:37:07