Автокоммит, вероятно, включен по умолчанию. С DataSourceTransactionManager автокоммит изменяется только , если транзакция фактически запущена. Ни NOT_SUPPORTED, ни SUPPORTS не запускают транзакцию, поэтому при любом состоянии по умолчанию, в котором находится Соединение, оно останется.
Попробуйте отключить автоматическую фиксацию по умолчанию в XML-файле Spring. Если он включен, Spring должен будет изменить его перед каждой передачей и затем восстановить, что может быть дорого в Oracle (не уверен). Это также предотвращает случайное совершение транзакции за пределами транзакции.
Подробнее см. org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin()
, который управляет автоподстройкой и уровнем изоляции Соединения. doBegin () вызывается только AbstractPlatformTransactionManager.getTransaction()
и handleExistingTransaction()
, если распространение требуется, REQUIRES_NEW или PROPAGATION_NESTED.
Вы, вероятно, хотите взглянуть на org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests
. Это базовый класс с поддержкой Spring, который вы можете использовать для своих тестовых классов. Он будет откатывать любые транзакции в конце каждого теста. Таким образом, нет необходимости изменять аннотации только для проверки. Вы можете установить свой @Transactional таким, каким он должен быть в prod, и полагаться на откаты, чтобы убедиться, что на самом деле ничего не изменилось в БД во время теста.