Java 如何使用spring jpa执行线程安全的“update XXX set a=a+1”语句?

Java 如何使用spring jpa执行线程安全的“update XXX set a=a+1”语句?,java,spring,spring-data-jpa,Java,Spring,Spring Data Jpa,当然,我们可以这样做: User old = userRepository.findOne("xxx@gmail.com"); old.setFollwersNumber(old.getFollwersNumber() + 1); userRepository.save(old); 但是它不是线程安全的,不是吗?你担心两个人同时跟踪同一个用户,然后这个数字就不正确了吗 与其更新用户对象来跟踪关注者的数量,不如编写一个查询来查询关注者的数量?您是否有下表或可以查询的内容?这将防止两者失去同步 有

当然,我们可以这样做:

User old = userRepository.findOne("xxx@gmail.com");
old.setFollwersNumber(old.getFollwersNumber() + 1);
userRepository.save(old);

但是它不是线程安全的,不是吗?

你担心两个人同时跟踪同一个用户,然后这个数字就不正确了吗

与其更新用户对象来跟踪关注者的数量,不如编写一个查询来查询关注者的数量?您是否有下表或可以查询的内容?这将防止两者失去同步


有多个选项可用于在应用程序中缓存/过期此数据以提高性能

你可以在查询中找到你的对象,

你说的不安全是什么意思?那不安全是因为?我的意思是它不是线程安全的。你把线程安全和事务混淆了。它们不是相同的概念。上面的代码是线程安全的,因为它只处理局部变量。@TomG userRepository是存储,而不仅仅是局部变量,此代码以非线程安全的方式修改存储中的对象。