【发布时间】:2009-03-05 22:27:56
【问题描述】:
假设我有一个使用原始 SQL 更新计数器的计数器函数:
public void updateCounter() {
executeSql("UPDATE counter SET count_value = count_value + 1 WHERE id = 1;");
}
数据库将确保按预期处理对计数器的两个并发调用 - 所有调用都会以一个增量更新计数器,并且不会丢失任何更新。
我想使用 GORM,而不是通过发出原始 SQL 命令来执行此操作。天真的方法是这样的:
public void updateCounter() {
Counter c = Counter.get(1)
c.countValue += 1
c.save()
}
在这种情况下,我假设如果两个线程同时调用 updateCounter() 方法,更新可能会丢失。处理此并发问题的正确“Grails/GORM 方式”是什么?
【问题讨论】:
标签: hibernate grails concurrency transactions grails-orm