加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何使用Spring Data MongoDB进行乐观锁定?

发布时间:2020-12-15 01:50:11 所属栏目:大数据 来源:网络整理
导读:我要经历Spring Data MongoDB Reference Documentation,我发现这些例子有点过于简单化了. 特别是我试图了解如何处理并发环境中的陈旧数据.例如,假设我有以下实体: public class Person { private final String username; private final String firstname; p

我要经历Spring Data MongoDB – Reference Documentation,我发现这些例子有点过于简单化了.

特别是我试图了解如何处理并发环境中的陈旧数据.例如,假设我有以下实体:

public class Person {

    private final String username;
    private final String firstname;
    private final String lastname;

    [...]

}

现在,如果我使用CrudRepository来保存/更新/删除我的实体,那么想象一下这样一个场景,其中两个线程检索同一个实体,其中一个删除它,另一个更新其lastname字段.如果删除调用在保存调用之前完成,那么当预期行为导致保存操作失败时,我的实体将被删除然后重新创建.

到目前为止,我已经看到两种解决此问题的方法:

>使用@Version注释.找不到任何文档说Spring Data支持使用版本化文档在MongoDB中进行乐观锁定.如果有人能指出我的链接,我们将不胜感激.
>使用MongoOperations.findAndModify,如果返回null则失败.这种方法的缺点是我不能再实现我的存储库API以获得“获取实体”和“保存更新的实体”类型的语义.例如.:

User user = userRepository.findByUsername("uniqueUsername");
user.setLastName("Archer");
userRepository.update(user);

我想将其中的一部分推送到存储库我猜:

userRepository.updateLastname("uniqueUsername","Archer");

但我有点担心,如果我想要做的每种类型的更新都需要一个新方法,我的存储库接口将无法控制地增长.

我意识到我还没有提出过一个问题,所以这就是:使用Spring Data for MongoDB设计应用程序的最佳实践是什么?

最佳答案
在属性上使用@ org.springframework.data.annotation.Version应该可以解决问题.我创建了DATAMONGO-1275来改进文档.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读