我的数据库是MS SQL。我想在HQL中使用ROW_NUMBER()
。可能吗?怎么样?我知道
关于Custom Functions
。但更喜欢不需要修改web.config的方法。
更新
我的最终目标是删除表/实体中的所有记录,而不是使用HQL的最后n条记录。我不喜欢将所有内容加载到内存中然后删除它们。
答案 0 :(得分:1)
从NH v2开始,HQL支持通过IQuery.ExecuteUpdate()
删除和更新语句。您也可以尝试使用IQuery.SetMaxResults()
和IQuery.SetFirstResult()
(使用ROW_NUMBER()
)来获得所需的效果。
编辑: 我试验了自己,在ExecuteUpdate()的sql生成中忽略了SetMaxResults和SetFirstResult,所以这不起作用。
同样@下面的评论,HQL ExecuteUpdate(至少对于DELETE)并不一定意味着对象状态的内存加载。
答案 1 :(得分:0)
我会使用普通的SQL。主要是因为“我不喜欢将所有这些加载到内存中”。这不是一个非常面向对象的任务,因此您不需要ORM。
注意:纯SQL意味着会话缓存被破坏。只要你不在同一(非无状态)会话中做其他事情,你就不会遇到任何麻烦。如果你这样做,我会选择OO方式并实际将项目加载到内存中。
答案 2 :(得分:0)
我会使用HQL的ExecuteUpdate
和Desc
排序组合,类似于:
delete Person p1
where p1.Id in
(select p2.Id
from Person p2
where rownum <= 10
order by p2.Id desc)