为什么@Transactional没有延长到存储库方法?

时间:2019-03-07 14:25:55

标签: java spring hibernate spring-data-jpa spring-data

我需要在一笔交易中执行多项操作。

我使用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作为复杂事务的一部分?

0 个答案:

没有答案