У меня есть глобальное число, которое часто увеличивается, но сбрасывается ежегодно. Прямо сейчас я храню это глобальное число в виде одной строки:
class GlobalCounter {
Integer counter = 0
static constraints = {
}
}
Когда я увеличиваю его, я использую блокировку в транзакции:
def globalCounter = GlobalCounter.lock(1)
globalCounter.counter = globalCounter.counter + 1
globalCounter.save()
globalCounter.discard()
Проблема в том, что при частом обновлении вместо ожидающего кода появляется исключение:
Transaction (Process ID 61) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Я знаю, что когда вы добавляете новую строку, база данных дает возможность использовать первичный ключ с автоматическим приращением, поэтому я думаю, что это должно быть возможно без взаимоблокировок. Как я могу это сделать?