子查询中的 NHibernate HQL SELECT TOP

标签 nhibernate hql

有没有办法在子查询上使用 SetMaxResult()?我正在编写一个查询以返回属于最新订单的所有订单项目。所以我需要限制子查询的记录数。

等效的 sql 看起来像:

SELECT i.*
FROM tbl_Orders o
JOIN tbl_OrderItems i on i.OrderId = o.Id
WHERE
o.Id in (SELECT TOP 1 o.Id FROM tbl_Orders o orderby o.Date desc)

我使用 hql 是因为标准 api 不允许您投影另一个域对象(我正在查询订单但想要返回订单项目)

我知道 hql 不接受“SELECT TOP”,但是如果我使用 SetMaxResult() 它将适用于外部查询,而不是子查询。

有任何想法吗?

最佳答案

从 NHibernate 3.2 你可以使用 SKIP n / TAKE n在查询结束时的 hql 中。
您的查询将是:

SELECT i.*
FROM tbl_Orders o
JOIN tbl_OrderItems i on i.OrderId = o.Id
WHERE
o.Id in (SELECT o.Id FROM tbl_Orders o orderby o.Date desc take 1)

关于子查询中的 NHibernate HQL SELECT TOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2048501/

相关文章:

java - 查询语法异常 : Unable to locate class

nhibernate - 使用 Fluent NHibernate 生成表索引

nhibernate - 使用 nHibernate,如何读取未提交的内容?

nhibernate - 存储库实现

nhibernate - NHibernate 的 NServiceBus 警告

java - HQL查询复杂DTO

c# - 如何从我的域逻辑生成 NHibernate 映射文件和数据库结构?

sql - 如果grails中的Hibernate查询中的条件如何应用

java - 查询语法异常 : Path expected for join

java - "Not supported for DML operations"使用简单的 UPDATE 查询