Почему @Transactional не распространяется на метод репозитория? - PullRequest
0 голосов
/ 07 марта 2019

Мне нужно выполнить несколько операций в одной транзакции.

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

...