小编Kev*_*vin的帖子

悲观锁使用 spring 数据 jpa 不起作用

我想借助数据库获取序列号。这是我想要的:

1.从数据库中读取实体并锁定

2.增加序列号并更新实体。

我假设第一个线程可以锁定记录,而另一个线程在第一个线程提交其事务之前不会工作,但是,我得到了与我想要的相反的结果。

下面是我的代码:

存储库:

public interface ActivityNoGeneratorRepository extends BaseRepository<ActivityNoGenerator, Long> {
    @Lock(LockModeType.PESSIMISTIC_WRITE)
    @Query(value = "select  generator from ActivityNoGenerator generator where id=:id")
    ActivityNoGenerator getGeneratorByIdForUpdate(@Param("id") Long id);
}
Run Code Online (Sandbox Code Playgroud)

服务:

@Service
public class ActivityNoGeneratorServiceImpl implements IActivityNoGeneratorService {
    @Autowired
    private ActivityNoGeneratorRepository activityNoGeneratorRepository;

    @Override
    @Transactional
    public String getActivityNo() {
        ActivityNoGenerator activityNoGenerator = activityNoGeneratorRepository.getGeneratorByIdForUpdate(1L);
        System.out.println(1);
        Integer currentValue = activityNoGenerator.getCurrentValue() + 1;
        if (!StringUtils.equals(DateFormatUtils.format(new Date(), "yyyyMM"), DateFormatUtils.format(activityNoGenerator.getLastAccessTime(), "yyyyMM"))) {
            currentValue = 1;
        }
        String serialNum = String.format("%0" + activityNoGenerator.getWidth() + "d", currentValue);
        String activityNo = …
Run Code Online (Sandbox Code Playgroud)

java multithreading jpa spring-data-jpa

5
推荐指数
1
解决办法
2568
查看次数

标签 统计

java ×1

jpa ×1

multithreading ×1

spring-data-jpa ×1