2009-06-15 8 views
2

私はレコードを更新するためにhqlを渡すことができるIQueryインターフェイスまたはISessionでquery.executeUpdate()メソッドを見つけることができませんでした。 NHibernateのでnHibernateで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

+0

私の(upvoted)答えは何らかの理由で削除されましたが、NHibernateのv2.1でこの機能を使用する必要があると言われました。とにかく最近のバージョンはないでしょう。 @undoなぜ私の答えを削除しますか?それは少なくとも2人を助けたに違いないと思われる。 –

+0

@DerekEkins、大文字小文字をmetaに設定することもできます。 OPとしたいHQLがサポートされています。私たちは、正当な答えであると思われるものを、権限のないユーザに削除させるべきではありません。 –

答えて

0

我々はそれをやっている少し異なる:ここ

はHQLある あなたは、データベースから構造を取得した値を変更し、変更をコミットします。何より、実際の質問に取り組む任意の答えがありますので 私は...より直接的にこれを行うことが可能である

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

ここでの欠点は、単一の更新ステートメントではなく、最初のステップとしてデータベースからオブジェクト全体を選択することです。私がここでこれを無視することができれば、私は驚いています。 – dotnetcoder

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です。

関連する問題