Spring Transaction аннотация на junit с помощью Spring jpa - PullRequest
0 голосов
/ 26 октября 2018

почему @Transactional требуется для тестового примера, функция которого будет выполнять обновление (репозиторий JPA) в слое dao, например

@Test
@Transactional
public void processTestSuccess() throws Exception{
    abc.process();//abc instance of Abc class
}

public class Abc{
   @Transactional
   public void process(){
      .....
      jpaRepository.update(10); // spring jpa repo updating something
   }
}

Так как при запуске теста без аннотации @Transaction для него выдается следующее исключениев строке

jpa.update(10);

org.springframework.dao.InvalidDataAccessApiUsageException: выполнение запроса на обновление / удаление;вложенным исключением является javax.persistence.TransactionRequiredException: выполнение запроса на обновление / удаление

1 Ответ

0 голосов
/ 26 октября 2018

Ваш метод process() помечен @Transactional.Это означает, что требуется транзакция.

Поскольку вы, кажется, запускаете это в контексте приложения Spring, аннотация оценивается и выдается исключение, если транзакция теперь доступна.

Добавляя @Transactional ктест, в котором вы делаете транзакцию доступной (которая будет отменена в конце теста).

...