如何为 Hibernate 查询注释添加限制?

Posted

技术标签:

【中文标题】如何为 Hibernate 查询注释添加限制?【英文标题】:How to add limit to Hibernate query annotation? 【发布时间】:2014-08-09 03:09:00 【问题描述】:

我在 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注解添加限制

【问题讨论】:

【参考方案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 注解的案例。

以上是关于如何为 Hibernate 查询注释添加限制?的主要内容,如果未能解决你的问题,请参考以下文章

如何为多行命令添加行注释[重复]

如何为Json.NET输出添加注释?

Maven - 如何为休眠添加所有必需的依赖项?

如何为查询中的条件使用变量以将查询限制为活动表单?

如何为 EntityManagerFactory 设置 Hibernate 拦截器

如何为列谷歌图表添加填充