【问题标题】:How to add limit to Hibernate query annotation?如何为 Hibernate 查询注释添加限制?
【发布时间】:2025-07-02 19:45:01
【问题描述】:

我在 Java Hibernate 中有这个

@Query("SELECT dirPar FROM DirectiveParagraph dirPar, Directive dir  "
        + "WHERE dirPar.directive = dir "
        + "AND dir.txtDirCode = :txtDirCode ");

List<DirectiveParagraph> getByName(@Param("txtDirCode") String name, @Param("page") int page ,@Param("size") int size);

我想用限制和大小检索,就像这样

SELECT * FROM tblDirectiveParagraph where intDirectiveID = 1 limit 10,10;

如何给上面的@Query注解添加限制

【问题讨论】:

    标签: java mysql hibernate jdbc spring-data-jpa


    【解决方案1】:

    您可以尝试在 getByName 方法中添加 Pageable 参数

        @Query("SELECT dirPar FROM DirectiveParagraph dirPar, Directive dir  "
        + "WHERE dirPar.directive = dir "
        + "AND dir.txtDirCode = :txtDirCode ");
        Page<DirectiveParagraph> getByName(@Param("txtDirCode") String name, Pageable page);
    

    这是一个示例方法调用:

        public void someMethod(){
            PageRequest pageR = new PageRequest(10,10);
            Page<DirectiveParagraph> result = directiveParagraphRepository.getByName("txtDirCode",pageR);
            List<DirectiveParagraph> resultList = result.getContent();
        }
    

    【讨论】:

      【解决方案2】:

      HQL 不支持限制。要设置大小,您将使用 setMaxResults。要设置起点,请使用 setFirstResult。

      Query q = session.createQuery("...");
      q.setFirstResult(10);
      q.setMaxResults(10);
      

      如果您不想那样做,您将不得不使用 createSQLQuery 来编写原生 sql 查询而不是 hql。

      【讨论】:

      • Op 专门询问了一个使用@Query 注解的案例。