Объект не удаляется в тесте JUnit с @Transactional - PullRequest
1 голос
/ 06 июля 2019

Я иногда использую аннотацию @ Transactional в моих тестах JUnit.Я использую @Transactional в JUnit для отложенной выборки коллекций.

В настоящее время я столкнулся с неизвестным для меня поведением аннотации @ Transactional .

В моей базе данных есть одна Car сущность.Я удаляю эту сущность в моем тесте.Если я использую @ Transactional в моем тесте, то эта сущность НЕ удаляется из базы данных.В противном случае, если я не использую @Transactional, то сущность удаляется.Я вижу это после каждого теста в моей базе данных.

У меня есть стандартная сущность и репозиторий.Моя сущность:

@Entity 
public class Car {

    @Id
    @GeneratedValue
    private int id;

    private String model;

    //...constructors, getters and setters }

Мой репозиторий:

public interface CarRepository extends JpaRepository<Car, Integer>{
    List<Car> findByModel(String mazda);
}

Мой тест:

@RunWith(SpringRunner.class)
@SpringBootTest
public class RelationsTest {

    @Autowired
    CarRepository carRepository;

    @Test
    //@Transactional
    public void deleteCar() throws Exception {

        List<Car> cars = carRepository.findByModel("Mazda");
        assertThat(cars).hasSize(1);

        carRepository.deleteById(cars.get(0).getId());

    }

Что является причиной того, что с @ Transactional объект не удален из базы данных?

1 Ответ

3 голосов
/ 06 июля 2019

Из Spring Boot документация :

Если ваш тест @Transactional, он по умолчанию откатывает транзакцию в конце каждого метода теста.

...