假设我有一个计数器函数,它使用原始 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 方式”是什么?