Spring Data JPA自定义查询限制功能不起作用[重复]

Posted

技术标签:

【中文标题】Spring Data JPA自定义查询限制功能不起作用[重复]【英文标题】:Spring Data JPA Custom Query limit functionality not working [duplicate] 【发布时间】:2017-10-24 12:11:14 【问题描述】:

我创建了一个自定义查询

@Repository
public interface SecurityQuestionRepository extends JpaRepository<SecurityQuestion, Integer>

    @Query("select q from SecurityQuestion q order by q.questionId asc limit 0, 3 ")
    public List<SecurityQuestion> findQuestion();


当我调用服务并调用公共List&lt;SecurityQuestion&gt; findQuestion() 方法limit 0,3 不起作用

这里是休眠日志,

Hibernate: select securityqu0_.question_id as question1_4_, securityqu0_.question_desc as question2_4_ from user_security_question securityqu0_ order by securityqu0_.question_id asc

如何使此限制功能在此工作?

【问题讨论】:

JPQL 不支持“LIMIT”,因为任何基本的 JPA 文档都会告诉您 由于limit这个关键字不被少数数据库厂商支持,主要是Oracle,我猜这就是JPQL中没有包含它的原因。使用Pageable,可以很方便的转换成ArrayList...:) 【参考方案1】:

尝试传递Pageable类型的方法参数:

@Query("select q from SecurityQuestion q order by q.questionId asc")
public List<SecurityQuestion> findQuestion(Pageable page);

当你调用这个函数时,像这样初始化page

securityQuestionRepository.findQuestion(new PageRequest(0, 3));

或者只使用原生查询:

@Query(nativeQuery = true,
       value = "select * from user_security_question order by question_id asc limit 0, 3")
public List<SecurityQuestion> findQuestion();

【讨论】:

@Query(nativeQuery = true, value = "select * from user_security_question order by question_id asc limit 0, 3") public List findQuestion();这工作正常 这是迄今为止我在这个主题上看到的最好的答案。本机查询始终是最不受欢迎的选项,因为它违背了 JPA 的目的。考虑到数据库之间的“限制”功能差异很大(例如 postgres 与 oracle) 假设您使用的是Java 8,您可以添加default List&lt;SecurityQuestion&gt; findQuestion() return findQuestion(new PageRequest(0, 3)); ,这样调用者就不需要指定Pageable 参数。【参考方案2】:

还有一个更简单的变体:

public interface SecurityQuestionRepository extends JpaRepository<SecurityQuestion, Integer>

    List<SecurityQuestion> findTop3ByOrderByIdAsc();

更多信息是here。

【讨论】:

这应该是最佳答案。无需设置可分页结果。简单【参考方案3】:

@Query注解内添加参数nativeQuery = true, value = "your query"

【讨论】:

以上是关于Spring Data JPA自定义查询限制功能不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data Jpa 使用@Query标注自定义查询语句

Spring Data 系列学习Spring Data JPA 自定义查询,分页,排序,条件查询

Spring Data 系列学习Spring Data JPA 自定义查询,分页,排序,条件查询

在 JPA 存储库(Spring Data Jpa)中执行自定义查询

自定义查询 Spring Data JPA + REST

使用 Spring DATA JPA 创建自定义查询?