У меня есть приложение Spring Boot 2, где у меня есть JdbcPersistenceHelper, как показано ниже:
@Component
public class JdbcPersistenceHelper {
private EntityManager entityManager;
@Autowired
public JdbcPersistenceHelper(EntityManager entityManager) {
this.entityManager = entityManager;
}
// Some persistence-related utility methods here
Я использую этот класс для генерации некоторых данных фикстуры из моих тестов, и у меня есть несколько @DataJpaTest аннотированных тестов, успешно использующих его. Однако, когда я пытаюсь использовать его в интеграционном тесте (аннотированный тестовый класс @SpringBootTest), я получаю следующую ошибку:
javax.persistence.TransactionRequiredException: Executing an update/delete query
Мой интеграционный тест выглядит следующим образом:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK, classes = ExchangeRateStoreApplication.class)
@AutoConfigureMockMvc
public class GenerateStrategyRatesTest {
@Autowired
MockMvc mockMvc;
@Autowired
EntityManager entityManager;
@Autowired
JdbcPersistenceHelper jdbcPersistenceHelper;
@BeforeEach
void setUp() {
jdbcPersistenceHelper.persistAllUpdatingStrategiesAvailable();
jdbcPersistenceHelper.persistAllExchangeRateProvidersAvailable();
}
// Some test methods here
В настоящее время я работаю с базой данных H2 в памяти, и моя Spring Boot application.yaml выглядит следующим образом:
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:ExchangeRateDB;DB_CLOSE_DELAY=-1
username: err
jpa:
database-platform: org.hibernate.dialect.H2Dialect
Я что-то упускаю?




Отметьте тестовый класс или перед методом для привязки к транзакции:
@BeforeEach
@Transactional
void setUp() {
или
@SpringBootTest
@Transactional
@AutoConfigureMockMvc
public class GenerateStrategyRatesTest
вы не можете выполнять операции сохранения/обновления/удаления без запущенной транзакции.