我有时在我的JUnit测试中使用 @Transactional 批注。我在JUnit中使用@Transactional进行延迟获取集合。
目前,我遇到了 @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 将该实体未从数据库中删除的原因是什么?