我需要在一笔交易中执行多项操作。
我使用org.springframework.transaction.annotation.Transactional
一个服务(带有@Transactional)调用另一个(不带@Transactional),并且该服务调用存储库
我有下一个服务
@Transactional
public void performBatchOperations( List<String> ids) {
service1.doAction(ids);
service2.doAction(ids);
}
service2
@Component
public class Service2 {
@Autowired
private Repo repo;
public void doAction(List<String> ids){
repo.delete(ids);
}
存储库
@Component
public class Repo extends
JpaRepository<Entity, Long>, JpaSpecificationExecutor<Entity>{
@Modifying
@Query("DELETE FROM Entity a WHERE a.jobId IN :ids")
void deleteByJobIdIn(@Param("ids") List<String> ids);
}
我遇到下一个错误
Caused by: javax.persistence.TransactionRequiredException: Executing an update/delete query
liberty-debug | at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:99)
但是我的服务方法上有@Transactional。为什么它没有延长到存储库?
是否可以使用@Modifying作为复杂事务的一部分?