Очистить постоянство между тестами в Spring с OpenJPA

Я использую Spring Data JPA и HSQLDB с OpenJPA в качестве поставщика JPA.

Созданы 2 тестовых класса (SpringBootTest), которые выполняются один за другим, оба используют один и тот же репозиторий для сохранения (используя save() из CrudRepository) сущностей.

@Entity(name = "theentity")
public class TheEntity {
   @GeneratedValue(strategy= GenerationType.IDENTITY)
   @Id
   private int id;
}


@Bean
public PlatformTransactionManager transactionManager() {
   final JpaTransactionManager tm = new JpaTransactionManager();
   tm.setEntityManagerFactory(entityManagerFactory());
   return tm;
}

Проблема в том, что когда я запускаю второй тестовый класс, я ожидаю очистить постоянство, включая начальное значение столбца identity.

Но вышеописанного не происходит.

При использовании спящего режима добавление аннотации:

@Transactional(propagation = Propagation.NOT_SUPPORTED)

выше тестовый класс делает всю работу за меня (откаты), к сожалению, аннотация ничего не делает с OpenJPA.

Есть ли альтернативный метод для этого? Может быть, нужно добавить какое-то свойство внутри persistence.xml или что-то еще в TransactionManager bean?


person yevtmp    schedule 26.12.2019    source источник


Ответы (1)


Вы пробовали @DataJpaTest аннотацию? Это основано на предположении, что вы используете весеннюю загрузку.

По умолчанию тесты JPA данных являются транзакционными и откатываются в конце каждого теста.

Из документации

Тесты Data JPA также могут внедрять bean-компонент TestEntityManager, который представляет собой альтернативу стандартному JPA EntityManager, специально разработанному для тестов.

Примеры и подробности здесь

person R.G    schedule 27.12.2019
comment
можно ли поделиться образцом проекта? - person R.G; 27.12.2019