我知道我们可以轻松地将过滤器应用于使用NHibernate的其他where
条件进行查询,但是在执行更新或删除时是否可以应用过滤器?
如果是,我该如何实现?
答案 0 :(得分:2)
是的,可以使用HQL(Hibernate查询语言)
以下是批量更新的示例
IQuery updateQuery = this.Session.CreateQuery("update TransferItem set Status = :newStatus where Status = :oldStatus")
.SetParameter("oldStatus", DownloadStatus.Active)
.SetParameter("newStatus", DownloadStatus.Queued);
updateQuery.ExecuteUpdate();
NHibernate应用已配置的映射来创建和运行以下SQL:
update cms_TransferItem set Status=@p0 where Status=@p1
以下是批量删除的示例
IQuery deleteQuery = this.Session.CreateQuery("delete TransferItem ti WHERE ti.Status = :statusToGo")
.SetParameter("statusToGo", DownloadStatus.Completed);
deleteQuery.ExecuteUpdate();
这样执行SQL:
delete from cms_TransferItem where Status=@p0
您可能会问,如果您必须使用查询语言,为什么不编写原始SQL?使用HQL时,您正在使用其余.NET代码正在使用的概念业务对象。 ORM工具的好处是,对于大部分代码,数据库表和对象到表的映射都被抽象掉了。使用HQL,您将继续与对象层交互,而不是直接与数据库表交互。