2013-11-22 6 views
3

Я последовал за Grails documenation он говорит, что делать пессимистичные блокировки можно сделать так:пессимистичные блокировки: блокировка объект базы данных Grails

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

так это блокирует экземпляр плана до сохранения не будет закончена на it.Now дюйма мой случай я хочу зафиксировать несколько планов одновременно, как это:

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

Я делаю это в Grails службы, которые являются транзакционными по умолчанию, но выше линии не работает, как expected.It не блокирует все строки и броски stale state exception, если одновременная транзакция является перфорированной ormed.

Как заблокировать несколько строк при чтении?

Пожалуйста, см связанный вопрос для получения дополнительной информации: concurrent transaction in grails resulting in database stale state exception

ответ

-1

Вы можете сделать что-то вроде этого, который работает для меня:

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

это работает для вас, потому что вы получите только одну строку, делая ' Process.get (job.process.id) '. Пожалуйста, просмотрите связанный вопрос, который детализирует, почему я не могу использовать такое решение, как yours.Thanks – vishesh

Смежные вопросы