如何使用spring jpa执行线程安全"更新XXX设置a = a + 1"声明?

时间:2014-08-27 13:33:52

标签: java spring spring-data-jpa

当然,我们可以这样做:

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

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

2 个答案:

答案 0 :(得分:0)

您是否担心两个人同时关注同一个用户,然后这个号码不正确?

为什么不编写一个查询关注者数量的查询,而不是更新User对象来跟踪关注者的数量?你有下表或可以查询的东西吗?这样可以防止两者失去同步。

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

答案 1 :(得分:0)

您可以lock查询对象available lock modes