Nhibernate 如何在HQL中使用ROW_NUMBER()?
我的数据库是MS SQL。我想在HQL中使用行号。可能吗?怎样我知道 关于但更喜欢不需要修改web.config的方式 更新:Nhibernate 如何在HQL中使用ROW_NUMBER()?,nhibernate,hql,row-number,Nhibernate,Hql,Row Number,我的数据库是MS SQL。我想在HQL中使用行号。可能吗?怎样我知道 关于但更喜欢不需要修改web.config的方式 更新: 我的最终目标是使用HQL删除表/实体中除最后n条记录之外的所有记录。我不希望在内存中加载所有语句,然后删除它们。从NH v2开始,HQL支持通过IQuery.ExecuteUpdate删除和更新语句。您还可以使用IQuery.SetMaxResults和IQuery.SetFirstResult进行实验,它们使用行数来获得所需的效果 编辑: 我自己做了一个实验,SetM
我的最终目标是使用HQL删除表/实体中除最后n条记录之外的所有记录。我不希望在内存中加载所有语句,然后删除它们。从NH v2开始,HQL支持通过IQuery.ExecuteUpdate删除和更新语句。您还可以使用IQuery.SetMaxResults和IQuery.SetFirstResult进行实验,它们使用行数来获得所需的效果 编辑: 我自己做了一个实验,SetMaxResults和SetFirstResult在为ExecuteUpdate生成sql时被忽略,所以这不起作用
此外,在下面的注释中,HQL ExecuteUpdate和至少对于DELETE,并不一定意味着内存中加载了对象状态。我将使用纯SQL进行此操作。主要是因为我不喜欢把它们都放在内存中。这不是一个非常面向对象的任务,所以您不需要ORM
注意:纯SQL意味着会话缓存被破坏。只要不在同一个非无状态会话中执行其他操作,就不会遇到任何问题。如果您这样做,我将选择OO方式并实际将项目加载到内存中。我将使用HQL的ExecuteUpdate和Desc排序的组合,类似于:
delete Person p1
where p1.Id in
(select p2.Id
from Person p2
where rownum <= 10
order by p2.Id desc)
你打算做什么?总是有,但我们需要知道你的需要。@binaryhowl:请查看我的更新。这听起来像是一个奇怪的目标-这是一次性的吗?HQL真的有必要吗?或者您可以使用Session.CreateSqlQuery使用普通SQL吗?这需要将对象加载到内存中。您错了!hql被转换为sql并直接执行到db!是的,那是真的,但据我所知,你没有可用的SetMaxResults。要使用SetMaxResults,您需要将它们放入内存中。这就是我真正的意思,如果我不清楚的话,很抱歉。rownum不为我工作。顺便说一下,我使用了SQL和行数。谢谢