Javax.persistence.TransactionRequiredException в интеграционном тесте Spring Boot

У меня есть приложение 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

Я что-то упускаю?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
1 045
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отметьте тестовый класс или перед методом для привязки к транзакции:

@BeforeEach
@Transactional
void setUp() {

или

@SpringBootTest
@Transactional
@AutoConfigureMockMvc
public class GenerateStrategyRatesTest

вы не можете выполнять операции сохранения/обновления/удаления без запущенной транзакции.

Другие вопросы по теме