如何在 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 中设置内部查询的限制?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AWS 放大 DynamoDB 架构中设置嵌套字段的限制?
如何在 postgres 中设置锁定超时 - Hibernate
如何在 Spring Data JPA 中设置 Hibernate 命名策略