Проблема с аннотациями @Transactional в Spring JPA

У меня есть сомнения, связанные с транзакциями внутри транзакций. Для фона у меня есть объект сущности School, которому сопоставлен объект сущности Set of Students. Я использую Spring Data JPA, которая отвечает за все грубые операции. У меня есть класс SchoolManagementService, в котором @Transactional (readonly = true) установлен на уровне класса, и для всех методов обновления, которые я использую, @Transactional над ними. В моем классе SchoolManagementService у меня есть метод deleteStudents (List), который я пометил как @Transactional. В этом методе я снова и снова вызываю StudentsRepository.delete (studentId). Я хочу убедиться, что в случае какого-либо удаления произошел сбой, транзакция должна выполнить откат для этого проверенного исключения. Я пытаюсь проверить это с помощью моего теста Spring Junit (я не использую по умолчанию rollback = true или @ rollback (true), потому что я хочу, чтобы это было отменено из-за некоторой исключительной ситуации во время выполнения, с которой я сталкиваюсь в методе удаления хранилища.

@RunWith(SpringJUnit4ClassRunner.class)   
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class})   
@ContextConfiguration(locations = {"classpath:PPLRepository-context.xml"})
public class TestClass{


@Test
@Transactional
public void testDeleteStudents(){
StudentManagementService.delete(randomList)
}

с этим тестом он удаляет все записи, кроме последней. В идеале это должно быть откат, и ни одна из записей не должна быть удалена.

Вот мой файл настроек sprin с конфигами TransactionMangaer


            
            
            
        

        
        
        
            
            
            
        

            
            
                
                
                
                
                    
                        
                                     
                                    
                                    
                        
                    

Может кто-нибудь подсказать, где мое понимание транзакций неверно? Что бы я ни читал из API, у меня сложилось впечатление, что если какой-то метод является @Transactional на уровне сервиса и если он вызывает несколько методов @Transactional из репозиториев Spring Data JPA, то, если я столкнусь с каким-либо исключением Runtime, все транзакции должны быть откатаны , Я даже попытался создать метод testcase, как показано ниже:

@Test
@Transactional
public void testDeleteStudents(){
StudentRepository.delete(1);
StudentRepository.delete(2);// 2 id is not present so I will get a runtime exception.
}

Несмотря на сохранение @Rollback (true / false) для этого метода, этот метод удаляет идентификатор 1 Student из базы данных. Я думал, что @Transactional в этом методе testcase создаст новую транзакцию, и все методы удаления транзакций из StudentRepository будут выполняться в одной транзакции. И никакие студенческие данные не будут зафиксированы до тех пор, пока не возникнет исключение времени выполнения.

Пожалуйста, помогите мне лучше понять транзакции, поскольку я новичок в этом. Я использую Spring Data JPA с базой данных Oracle.

Заранее спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос