use*_*238 8 java spring mongodb spring-data spring-data-mongodb
我正在浏览Spring Data MongoDB - 参考文档,我发现这些示例有点过于简单化了.
特别是我试图了解如何处理并发环境中的陈旧数据.例如,假设我有以下实体:
public class Person {
private final String username;
private final String firstname;
private final String lastname;
[...]
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我CrudRepository用来保存/更新/删除我的实体,那么想象一下这样一个场景,其中两个线程检索同一个实体,其中一个删除它,另一个更新其lastname字段.如果delete调用在调用之前完成,save那么我的实体将被删除然后重新创建,此时预期的行为将导致save操作失败.
到目前为止,我已经看到两种解决此问题的方法:
@Version注释.找不到任何文档说Spring Data支持使用版本化文档在MongoDB中进行乐观锁定.如果有人能指出我的链接,我们将不胜感激.MongoOperations.findAndModify如果返回则使用和失败null.这种方法的缺点是我不能再实现我的存储库API以获得"获取实体"和"保存更新的实体"类型的语义.例如:
User user = userRepository.findByUsername("uniqueUsername");
user.setLastName("Archer");
userRepository.update(user);
Run Code Online (Sandbox Code Playgroud)我想将其中的一部分推送到存储库我猜:
userRepository.updateLastname("uniqueUsername", "Archer");
Run Code Online (Sandbox Code Playgroud)
但我有点担心,如果我想要做的每种类型的更新都需要一个新方法,我的存储库接口将无法控制地增长.
我意识到我还没有提出过一个问题,所以这就是:使用Spring Data for MongoDB设计应用程序的最佳实践是什么?
| 归档时间: |
|
| 查看次数: |
6310 次 |
| 最近记录: |