我正在使用Spring CrudRepository来访问数据库,并且在测试中需要干净的状态,所以有这样的方法
@Before
public void setupDBs() {
companyRepository.deleteAll();
DBUtil.createTestCompanies(companyRepository);
}
添加了一些测试并且可以正常工作,但是随后开始获得
由以下原因引起:org.h2.jdbc.JdbcSQLException:唯一索引或主键冲突:...插入公司
从控制台看来,这行
来自2018-12-21 13:45:40.984 DEBUG 6283 --- [main] org.hibernate.SQL:插入公司
DBUtil.createTestCompanies(companyRepository);
的是在测试开始后执行的,尽管它是@Before
方法。
尝试将@Transactional
和@Before
方法都添加到@Test
,但保持不变。
解决方案是将清除数据库移到此处
@After
public void clearDB(){
companyRepository.deleteAll();
}
,现在可以使用了。但是有人可以解释这种行为吗?来自@Before
的语句如何在测试中执行?