首页 > 解决方案 > Spring JPA Lock Table 并传播事务

问题描述

我有一个类方法,它从数据库中提取一些行并设置一个锁。

public interface PersonRep extends JpaRepository<Person, String> {

    @Lock(LockModeType.PESSIMISTIC_WRITE)
    @Query(value = "SELECT p FROM Person as p WHERE p.fProcessed = false")
    List<Person>  fetchPersonToProccess(@Param("name") String name,Pageable pageable);
}

我有一个调用上述方法的服务层

@Service
public class PersonService{

    @Override
    @Transactional
    public List<Person> fetchPersonToProccess(String name, Pageable pageable) {
        return personRep.fetchPersonToProccess(name, pageable);      
    }
}

我需要在不离开锁的情况下将这些结果行处理到类的另一个方法中。

@Service
public class PersonProcess{
    @Transactional
    public List<Person> fetchPersonToProccess(UpdateRequest updateRequest, int numPage){
        //Process Row
        personService.fetchPersonToProccess(..);
    }
}

我希望在第二个方法结束时将锁释放到类 PersonProcess 中。我怎样才能做到这一点?

标签: springhibernatespring-bootjpaspring-data-jpa

解决方案


推荐阅读