Мне нужно выполнить несколько операций в одной транзакции.
Я использую 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 как часть сложной транзакции?