我遵循grails文档,它说要进行悲观锁定,我可以这样做:
def plan = Plan.findWhere(user:user, [lock: true])
因此,这会锁定计划实例,直到保存完成。现在,在我的情况下,我想一次锁定多个计划,如下所示:
def plan = Plan.findAllWhere(user:user, [lock: true])
我在grails服务中这样做,默认情况下grails服务是事务性的,但上面的行并没有按预期工作。如果执行并发事务,它不会锁定所有行并抛出stale state exception
。
阅读时如何锁定多行?
有关更多信息,请参阅相关问题:grails中的并发事务导致数据库陈旧状态异常
你可以做这样的事情,对我来说很有效:
Process.withNewTransaction {
def process = Process.get(job.process.id)
process.lock()
process.sessionId = 0
process.processId = 0
process.save(flush:true)
}