悲观锁定:锁定数据库实体grails

时间:2013-11-22 14:37:57

标签: hibernate grails gorm pessimistic-locking

我按照grails文档说它做了悲观锁定我可以这样做:

def plan = Plan.findWhere(user:user, [lock: true])

所以这会锁定计划实例,直到保存完成为止。在我的情况下,我想一次锁定多个计划,如下所示:

def plan = Plan.findAllWhere(user:user, [lock: true])

我在grails服务中执行此操作,默认情况下是事务性的,但上面的行没有按预期工作。如果执行并发事务,它不会锁定所有行并抛出stale state exception

如何在阅读时锁定多行?

有关详细信息,请参阅相关问题:concurrent transaction in grails resulting in database stale state exception

1 个答案:

答案 0 :(得分:-1)

你可以做这样的事情,对我有用:

Process.withNewTransaction {
    def process = Process.get(job.process.id)
    process.lock()
    process.sessionId = 0
    process.processId = 0
    process.save(flush:true)    
}