2009-06-15 54 views
2

我無法在IQuery接口或ISession中找到任何query.executeUpdate()方法,我可以通過hql更新記錄。如何在nHibernate中運行更新HQL查詢?

這裏是HQL:

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

請參閱Mauricio對接受答案的評論。這現在已經實施。 – MPritchard 2012-07-24 13:05:11

+0

我的(upvoted)答案因爲某些原因被刪除了..但它表示你需要NHibernate的v2.1來使用這個功能。可能有更新的版本沒有。 @undo爲什麼刪除我的答案?看起來它一定至少幫助了2個人。 – 2016-09-01 18:37:21

回答

0

在NHibernate中,我們正在做的一點點不同: 你從數據庫中獲取的結構,改變的值,然後提交更改。 我不認爲這是可能更直接地做到這一點...

//Pseudocode 
T t = session.Get<T>(id); 
t.NFS = 10; 
session.SaveOrUpdate(t); 
session.Transaction.Commit(); 
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