当前位置: 首页 > 面试题库 >

如何在JPQL或HQL中进行限制查询?

况嘉运
2023-03-14
问题内容

在Hibernate 3中,有没有办法等效于以下HQL中的MySQL限制?

select * from a_table order by a_table_column desc limit 0, 20;

如果可能,我不想使用setMaxResults。这肯定在较旧的Hibernate / HQL版本中是可行的,但似乎已经消失了。


问题答案:

几年前,当有人问到为什么它在Hibernate
2中有效但在Hibernate
3中无效时,此消息发布在Hibernate论坛上:

在HQL中, 从不 支持Limit 子句。您应该使用setMaxResults()。

因此,如果它在Hibernate 2中工作,那似乎是偶然的,而不是设计的。我 认为 这是因为Hibernate 2
HQL解析器将替换它识别为HQL的查询的位,而其余部分保持不变,因此您可以使用一些本机SQL。但是,Hibernate 3具有适当的AST
HQL解析器,并且它的宽容度要低得多。

我认为Query.setMaxResults()确实是您唯一的选择。



 类似资料:
  • 问题内容: 在Hibernate 3中,有没有办法等效于HQL中的以下MySQL限制? 如果可能的话,我不想使用setMaxResults。这肯定在较旧的Hibernate / HQL版本中是可行的,但似乎已经消失了。 问题答案: 几年前,当有人问到为什么它在Hibernate 2中有效但在Hibernate 3中无效时,此消息发布在Hibernate论坛上: 在HQL中,从不支持Limit 子句

  • 问题内容: 如何限制JPQL命名查询的选择查询?我需要在查询级别本身而不是在Java层中完成限制!!!我正在尝试使用 但徒劳!!! 请建议 问题答案: 没有提供限制查询的机制。这通常是通过使用上的方法来实现的。如果必须避免在Java代码中指定此内容,则可以在包含查询并执行限制的数据库中进行查看。然后像将表一样将实体映射到此视图。 例:

  • 问题内容: 在JPQL中,我可以通过以下方式检索实体: 但是,如果我想检索Category实体的id和name字段(仅),则需要像对象这样的东西,通过它我可以说:和。如何在不检索整个实体的情况下做到这一点? 基本上,对于如何检索像查询的信息:? 问题答案: 在HQL中,可以使用list()函数获取包含结果行的Object []数组的列表: 返回数组中的第一个元素将是id,第二个-名称。 如果要使用

  • 我为Hibernate创建了一个自定义类型来存储OffsetDateTime的时间戳和偏移量(因为默认的JPA 2.2/Hibernate 5.2 with java 8支持实现会丢失偏移量信息): 现在,我想比较一下,所以这个JPA-QL查询可以工作: 在这个模型上: } 但这在以下方面失败了: 如何使CustomUserType具有可比性?