Порядок операций с БД в тесте Spring Data - PullRequest
0 голосов
/ 21 декабря 2018

Я использую 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 выполняется в тесте?

...