Я использую пессимистическую блокировку в своем коде сброса пароля.
В основном происходит то, что пользователь предоставляет токен (который был отправлен им по электронной почте в предыдущей транзакции), затем в сервисе состояние восстанавливается с помощью PasswordResetRequest.findByToken(token, [lock: true])
. Происходит некоторая проверка (был ли токен действителен? Истек ли срок действия запроса?), И затем пользователь, связанный с этим запросом сброса, получает значение request.user
(отношение PasswordResetRequest belongsTo User
). Затем пароль пользователя обновляется, пользователь сохраняется, а PasswordResetRequest
удаляется.
Я знаю, что согласно документам, PasswordResetRequest
будет заблокирован (и, таким образом, новый запрос будет заблокирован при его получении). Но как насчет User
, который с этим связан? Что произойдет, если у меня будет другой запрос, который читает пользователя по идентификатору, обновляет и сохраняет его (скажем, пользователь чудесным образом обновлял свою учетную запись в то же время, когда он сбрасывал свой пароль)?
Так что мой вопрос: при блокировке дочернего элемента, который belongsTo
родитель, блокируется ли родитель? Если нет, то как бы мне этого добиться (нужно ли мне выполнять извлечение информации или что-то в этом роде)?
Мне также любопытно поведение других отношений. Есть ли документация, которая говорит обо всем этом?