2011-12-04 13 views
1

tranactionが開かれていないテーブルからのアトミック更新レコードの最良の方法(もしあれば)は何ですか?私は...NHibernateアトミックレコードの更新

UPDATE Table_1 SET [email protected] WHERE [email protected] 

のようなものが多分それはHQLやNHibernateのからプレーンSQLによって可能であることを意味し

いHQLを経由して最後のNHibernateのバージョンのサポートのアップデート?! この声明はどうですか?

UPDATE Table_1 SET [email protected], @Result=1 
     WHERE [email protected] AND [email protected]<[email protected];SELECT @Result 
+2

なぜあなたは取引を懸念していますか?明示的にトランザクションを指定しないと、データベース自体によって暗黙的に作成されます(SQL Serverなど) – Newbie

+0

はい、しかし、すでにNHibernateでトランザクションを開いていて、この更新をより厳密な分離レベル?今のところNHibernateはネストされたトランザクションを持っていません:( –

答えて

1

HQL:

session.CreateQuery("UPDATE Entity1 SET Value=Value + :Increment WHERE Id=:Id") 
    .SetParameter("Increment", 10) 
    .SetParameter("Id", 5) 
    .ExecuteUpdate() 

SQL:

session.CreateSqlQuery("UPDATE Table_1 SET Value=Value + :Increment WHERE Id=:Id") 
    .SetParameter("Increment", 10) 
    .SetParameter("Id", 5) 
    .ExecuteUpdate() 
+0

これらのステートメントは原子的な更新を達成していますか?適切な分離レベルを持つトランザクションでラップする必要がありますか? –

+0

NHibernateそして/またはdbが暗黙的にそれを行います – Firo

+0

私はすでにNHibernateでトランザクションを開いて、この更新をより厳密な分離レベルで進めたいとしたらどうなりますか?NHibernateはネストされたトランザクションを持っていません:( –

関連する問題