生の SQL を使用してカウンターを更新するカウンター関数があるとします。
public void updateCounter() {
executeSql("UPDATE counter SET count_value = count_value + 1 WHERE id = 1;");
}
データベースは、カウンターへの 2 つの同時呼び出しが期待どおりに処理されることを確認します。つまり、すべての呼び出しがカウンターを 1 つのインクリメントで更新し、更新が失われないようにします。
生の SQL コマンドを発行してこれを実行するのではなく、GORM を使用したいと思います。それを行う単純な方法は、次のようなものです。
public void updateCounter() {
Counter c = Counter.get(1)
c.countValue += 1
c.save()
}
この場合、2 つのスレッドが同時に updateCounter() メソッドを呼び出すと、更新が失われる可能性があると想定します。この並行性の問題を処理するための正しい「Grails/GORM-way」は何ですか?