如何使用JPA存储库从Entity Manager复制回滚?

时间:2019-04-28 15:17:25

标签: spring hibernate spring-boot jpa

我正在将项目从Spring框架转换为Spring boot,因此不再使用持久性文件和其他配置文件。

此外,我放弃了使用实体管理器,而是创建了扩展JPA存储库的存储库,以便可以从那里使用功能。唯一的是,我有一些单元测试,并且在Spring框架中,每个测试的末尾都有一个带有回滚的finally子句,以便数据库中的数据特定于每个测试。 没有实体管理器怎么办?我尝试使用flush()方法,但没有结果...

1 个答案:

答案 0 :(得分:0)

默认情况下,数据JPA测试是事务性的,并在每次测试结束时回滚。

您可以参考弹簧测试文档中的Enabling and Disabling Transactions,其中指出:

  

使用@Transactional注释测试方法会导致测试在事务中运行,默认情况下,该事务在测试完成后会自动回滚。如果用@Transactional注释测试类,则该类层次结构中的每个测试方法都在事务中运行。未使用@Transactional注释的测试方法(在类或方法级别)不在事务内运行。此外,用@Transactional注释但传播类型设置为NOT_SUPPORTED的测试不在事务内运行。

提示

  • 如果您出于某种原因提交事务,则可以在方法或类级别使用@Commit批注或更不恰当地使用@Rollback(false)
  • 如果要在事务之外(之前或之后)执行代码,则可以在没有返回值(return void)的公共方法或接口的默认方法上使用@BeforeTransaction和@AfterTransaction。