使用Spring JPA在JUnit上进行Spring事务批注

时间:2018-10-26 12:22:54

标签: spring-data-jpa junit4 spring-transactions

为什么测试用例需要@Transactional,其功能将在dao层中进行更新(JPA存储库),如

@Test
@Transactional
public void processTestSuccess() throws Exception{
    abc.process();//abc instance of Abc class
}

public class Abc{
   @Transactional
   public void process(){
      .....
      jpaRepository.update(10); // spring jpa repo updating something
   }
}

在运行不带@Transaction批注的测试时,在行上会出现以下异常

jpa.update(10);
  

org.springframework.dao.InvalidDataAccessApiUsageException:执行中   更新/删除查询;嵌套异常为   javax.persistence.TransactionRequiredException:执行   更新/删除查询

1 个答案:

答案 0 :(得分:0)

您的方法process()@Transactional注释。这意味着它需要进行交易。

由于您似乎在Spring应用程序上下文中运行此代码,因此对注释进行了评估,并且如果现在有事务可用,则会引发异常。

通过将@Transactional添加到测试中,可以使事务可用(该事务将在测试结束时回滚)。