【发布时间】:2020-08-01 23:43:15
【问题描述】:
对于spring boot,我知道如果我有一个功能说,为了减少用户的平衡,我们可以在服务方法中使用@Transactional注解,如下所示:
@Transactional
public void reduceBalance(long userId, BigDecimal usage) {
...
}
但我的问题不是指在特定功能上放置控件,我想知道如下:
public void updateAge(long userId, int newAge) {
User theUser = userRepository.findById(userId).orElse(null); // Line A-1
theUser.setAge(newAge); // Line A-2
userRepository.save(theUser); // Line A-3
}
public void updateName(long userId, String newName) {
User theUser = userRepository.findById(userId).orElse(null); // Line B-1
theUser.setName(newName); // Line B-2
userRepository.save(theUser); // Line B-3
}
假设如果有 2 个请求同时进入,则 A-1 和 B-1 行同时执行,然后是 A-2 和 B-2,然后是 A-3 和 B-3。
B-3 会覆盖 A-2 的更改吗?如果是,是否意味着我们应该在几乎所有服务中都添加@Transactional 注解,或者实际上是否有更好的设计?
【问题讨论】:
标签: hibernate spring-boot spring-data-jpa