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

时间:2009-06-15 08:58:17

标签: nhibernate

我在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");

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

由于没有更多的答案解决实际问题,所以应该如何做,假设你的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