Error: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
16,527
You can use pessimistic locking
Use:
User user = User.lock(params.userId)
or
User user = User.findById(params.userId, [lock: true])
Author by
Admin
Updated on June 15, 2022Comments
-
Admin almost 2 years
I have the following action:
def index() { User.withNewTransaction { def user = User.get(params.userId) user.name = "test" user.save(flush:true) response.setContentType("image/gif") response.outputStream << PIXEL_BYTES_OF_A_GIF_IMAGE return } }
When running, I sometimes get the following error:
Message Executing action [index] of controller [test.TestController] caused exception: Runtime error executing action Caused by Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [test.User#1]
Why does this error happen? I thought
withNewTransaction
would prevent this error.