Hibernate 不使用@transactional for spring test回滚数据库中的更改
我正在创建一个需要将数据保存在数据库中的测试,因此我不能使用Hibernate 不使用@transactional for spring test回滚数据库中的更改,hibernate,jpa,rollback,Hibernate,Jpa,Rollback,我正在创建一个需要将数据保存在数据库中的测试,因此我不能使用@Transactional,因为我需要将数据有效地保存在数据库中,问题是不使用@transaction是否可以在提交后回滚事务?在每次测试之前,您的数据库应处于已知状态,并且任何一个测试都不应依赖于另一个测试的结果。如果出于某些其他原因需要提交(例如测试故障排除),则可以使用以下注释对测试类或单个测试方法进行注释: @Rollback(false)或@Commit @Rollback指示是否为事务测试创建事务 方法应在测试方法完成
@Transactional
,因为我需要将数据有效地保存在数据库中,问题是不使用@transaction
是否可以在提交后回滚事务?在每次测试之前,您的数据库应处于已知状态,并且任何一个测试都不应依赖于另一个测试的结果。如果出于某些其他原因需要提交(例如测试故障排除),则可以使用以下注释对测试类或单个测试方法进行注释:
@Rollback(false)
或@Commit
@Rollback指示是否为事务测试创建事务
方法应在测试方法完成后回滚。如果
如果为true,则事务将回滚;否则,事务将被删除
已提交(另请参见@Commit)。集成测试的回滚语义
在SpringTestContext框架中,即使@Rollback也默认为true
未显式声明
Spring将自动回滚标记为
@Transactional
的测试。在测试方法的范围内,您应该仍然能够查询数据库中以前保存的数据。@crizzis是的,但想法不是使用@Transactional
,因为我需要在测试中提交。您可以有一个用@After注释的清理方法,在每次测试后清理数据库。请描述您的用例(为什么您认为需要提交事务)?正如我所说,所有加入事务的bean都将看到数据修改。除非您的测试涉及多个线程或生成一个子事务,否则您应该可以