Допустим, у меня есть функция счетчика, которая обновляет счетчик с использованием необработанного SQL:
public void updateCounter() {
executeSql("UPDATE counter SET count_value = count_value + 1 WHERE id = 1;");
}
База данных будет гарантировать, что два одновременных вызова счетчика будут обрабатываться, как и ожидалось, - что все вызовы будут обновлять счетчик с одним шагом, и обновления не будут потеряны.
Вместо того, чтобы выполнить это, введя сырую команду SQL, я бы хотел использовать GORM. Наивным способом сделать это было бы что-то вроде:
public void updateCounter() {
Counter c = Counter.get(1)
c.countValue += 1
c.save()
}
В этом случае я бы предположил, что обновление может быть потеряно, если два потока вызовут метод updateCounter () одновременно. Что такое правильный путь Grails / GORM для решения этой проблемы параллелизма?