2009-08-03 4 views
0

ORMとしてPropelを使用しています。Propel行ロックバッチ更新の問題

は、私は、次のフィールドを持つテーブルにバッチ更新を実行する必要があります。

ID 
Company 
Assigned 

更新がCompanyの配列に取ると1Assigne Dフィールドを設定します。

同時に2つのバッチ更新が発生する可能性があります。それが起こると、私は1つのアップデートを受け入れ、別のアップデートを拒否する必要があります。 1つのバッチ更新のためにテーブルをロックする方法はありますか?または、より良い解決策がありますか?

+0

これはおそらく役立ちます:http://markmail.org/message/4g6l6jmji6t66sry –

+0

@サム、私はあなたのリンクで提案された解決策についてかなり懐疑的です。提案された解決策は、フィールドを追加し、そのフィールドが占有されているかどうかをチェックすることです。しかし、データベースの基礎となるフィールドはまったく触れられません。つまり、ユーザーが別の呼び出しで新しいオブジェクトをインスタンス化する場合、フィールドはまだfalseです。それは問題を解決しません – Graviton

答えて

1

ここに私が見つけた解決策があります。返される行数は、選択したCompanyの数と同じでない場合は、今すぐバッチ更新

update table 
set Assigned=2 
where Assigned=1 
and Company in {company1, company2} 

をやったときに代わりにそれをロックする

は、より良い方法は、以下の同等のクエリを使用することです操作全体はrolled backでなければなりません。