Я мигрирую с spring-boot 1.5.x на 2.0.4 и заметил интересный случай / поведение с @ DataJpaTest
У меня есть тест
@ExtendWith(SpringExtension.class)
@DataJpaTest
public class SomeTest {
@Autowired
private SomeRepository repository;
@Autowired
private JdbcTemplate template;
@Test
public void save() {
String number = "123";
SomeEntity entity = SomeEntity.builder()
.number(number)
//some attributes here
.build();
repository.save(entity);
//that line fails because SELECT returns nothing back
Map<String, Object> result = template.queryForMap("select id, version from some_entity where number=?", number);
}
Этот тест не пройден потому что ничего не возвращается из шаблона. Я не вижу даже оператора INSERT в журналах. Но со старой версией spring-boot 1.5.x я вижу, что INSERT запущен и тесты пройдены.
Но интересная вещь в обновленной версии - если я добавлю строку repository.findAll
(не repository.findById(id)
) -> что это не поможет) до repository.save(entity)
все это работает хорошо, и в логах я вижу, и оператор INSERT срабатывает.
Может кто-нибудь, пожалуйста, помогите мне понять, что происходит и как это работает под капотом. Почему сущность не сохранилась? и почему repository.findAll
настолько особенный, что позволяет сохранять данные.
Спасибо.