如何在 Hibernate 中设置内部查询的限制?

Posted

技术标签:

【中文标题】如何在 Hibernate 中设置内部查询的限制?【英文标题】:How to set a limit to inner query in Hibernate? 【发布时间】:2011-02-13 21:31:36 【问题描述】:

我有这样的 HQL:

from Table1 t1 where t1.name not in (select t2.name from Table2 t2 order by t2.date limit 10)

问题是它不理解limit 关键字。有没有办法在不将其拆分为两个子查询的情况下运行此类查询?

【问题讨论】:

【参考方案1】:

看How do you do a limit query in HQL?

你不能用 hql 限制用 hql 编写的查询。您需要在 Query 对象上调用 setMaxResults,我猜这会阻止您对 hql 子查询应用限制。

这让您可以选择

将其编写为 sql 查询或 试图寻找另一种方式来编写您的 hql 查询,这样您就不需要在子查询中进行限制。

【讨论】:

还有第三个选项。执行 2 个单独的 HQL 查询,其中第一个的结果将使用 Java 输入到第二个。 cherouvim 的解决方案会导致原子性问题。【参考方案2】:

如果您将查询作为 SQLQuery 提交,然后将您的类添加为实体,则可以使用限制,因为查询是以 sql 形式提交的。不过你必须使用 sql 语法。

String sql = "select * from Supplier limit 1";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Supplier.class);
List results = query.list();

-->(也适用于子选择)

【讨论】:

以上是关于如何在 Hibernate 中设置内部查询的限制?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Fortran 程序中设置内部挂钟?

如何在 AWS 放大 DynamoDB 架构中设置嵌套字段的限制?

如何在 postgres 中设置锁定超时 - Hibernate

如何在 Spring Data JPA 中设置 Hibernate 命名策略

hibernate - 如何在 mysql 和 oracle 数据库中设置自动增量?

如何使用hibernate jpa在内存数据库中设置h2?