例:
后实体
public class PostEntity implements Serializable {
private static final long serialVersionUID = 567999999736566810L;
@Id
private String uid;
// Value to be incremented
@Column(nullable = false)
private int likeCount = 0;
// ... Getters and Setters
}
内部邮政服务
public int likePost(String postUID) {
final PostEntity postEntity = postRepository.findByUid(postUID);
int update = postEntity.getLikeCount() + 1;
postEntity.setLikeCount(update);
postRepository.save(postEntity);
return update;
}
主要问题:
如何以这种方式避免冲突?
就像两个用户获得值6并将其递增到7一样,而不是期望的结果8。
我已经看到使用MongoDB在JS中完成此操作。
最佳答案
您可以使用SERIALIZABLE
隔离的事务。使用@Transactional(isolation = Isolation.SERIALIZABLE)
标记您的服务方法,以确保没有2个并发进程正在执行此事务。
Bealdung这篇文章解释了隔离和传播的不同类型。
关于java - 实体内的增量值(likeCount)不会遇到并发问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62311504/