在Grails控制器中假设以下代码:
def action = {
ClassName o = ClassName.findByFoo(params.foo)
if (o) {
o.counter += 1
}
}
默认情况下,Grails通过默认添加到所有GORM数据库表的version
列使用乐观锁定。但是,如果向此操作发送了足够多的多个并发请求,则乐观锁定机制将崩溃,并出现以下异常:
org.hibernate.StaleObjectStateException:
Row was updated or deleted by another transaction (or unsaved-value mapping was
incorrect): [ClassName#id]
对于失败的更新/删除完全不重要的域对象,我想禁用锁定机制,这样就不会抛出任何StaleObjectStateException。我如何实现这一目标?
答案 0 :(得分:5)
来自mapping DSL docs:你可以这样禁用它:
class Person {
..
static mapping = {
table 'people'
version false
}
}
我怀疑你可以为特定的电话禁用它。