如何在nHibernate中运行更新HQL查询?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在nHibernate中运行更新HQL查询?相关的知识,希望对你有一定的参考价值。

我在IQuery接口或ISession中找不到任何query.executeUpdate()方法,我可以在其中传递hql来更新记录。

这是hql:

string hql = "update QAD qa set qa.NFS=:NFS where qa.ID = 1145";
IQuery q = session.CreateQuery(hql).SetString("NFS", "10");
答案

在NHibernate中,我们做的有点不同:从数据库中获取结构,更改值然后提交更改。我不认为有可能更直接地做到这一点......

//Pseudocode
T t = session.Get<T>(id);
t.NFS = 10;
session.SaveOrUpdate(t);
session.Transaction.Commit();
另一答案

由于没有更多的答案解决实际问题,这里应该如何做,假设您的NHibernate版本不太老不支持:

string hql = "update QAD qa set qa.NFS=:NFS where qa.ID = 1145";
IQuery q = session.CreateQuery(hql).SetString("NFS", "10");
q.ExecuteUpdate();

就个人而言,我宁愿将id设置为参数。如果您愿意,您可以查看ExecuteUpdate的返回值。它将告知有多少实体已更新。

有关HQL DML语句的参考文档是here

以上是关于如何在nHibernate中运行更新HQL查询?的主要内容,如果未能解决你的问题,请参考以下文章

使用 HQL 查询的 Hibernate 批量更新

ORM篇——有关NHibernate查询封装

运算符和参数中的 HQL

能讲讲 hql 语句么?

转义 SQL 参数

NHibernate教程(11)--多对多关联查询