gpt4 book ai didi

grails - 访问belongsTo或其他关系时,悲观锁定的行为是什么?

转载 作者:行者123 更新时间:2023-12-02 14:48:23 29 4
gpt4 key购买 nike

我在密码重置代码中使用了pessimistic locking

基本上发生了什么事,就是用户提供了 token (在先前的交易中通过电子邮件发送给他们),然后在服务中,使用PasswordResetRequest.findByToken(token, [lock: true])检索状态。发生一些验证( token 是否有效?请求是否已过期?),然后使用request.user(与PasswordResetRequest belongsTo User的关系)检索与此重置请求关联的用户。然后更新用户密码,保存用户,并删除PasswordResetRequest

我知道根据文档,PasswordResetRequest将被锁定(因此在检索时将阻止新查询)。但是与之关联的User呢?如果发生其他一些请求,该请求通过ID读取用户,更新并保存用户(例如,用户在重置密码的同时奇迹般地更新了帐户),该怎么办?

所以我的问题是,当锁定belongsTo父级的子级时,父级也会被锁定吗?如果没有,我将如何实现这一目标(我是否需要执行急​​切的获取操作)?

我也对其他关系的行为感到好奇。是否有关于所有这些内容的文档?

最佳答案

根据我自己的锁定经验,我建议阅读一些有关数据库锁定的文章(DB locks),至少它对了解如何以及为什么某些记录被锁定而其他记录没有被锁定有很大帮助。

至于您的问题,在您已经触发锁定时将获取的所有条目也将被锁定。
因此,如果您执行request.user,则User实例也将被锁定(按ID)。

另外,如果您不确定所有设置是否正常,我建议您进行一次小型测试。在您的密码重置方法(“初始化”用户之后)中插入sleep(2000)(稍作延迟),然后调用另一个尝试更新用户输入的方法,该方法将失败。

关于grails - 访问belongsTo或其他关系时,悲观锁定的行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56294797/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com