Spring Boot @Transactional поведение, когда метод с меткой @Transactional вызывается из метода, имеющего текущую родительскую транзакцию - PullRequest
0 голосов
/ 27 февраля 2020

Вот псевдокод / ​​поток некоторой части моего приложения:

@Transactional
updateResource(String whatToUpdate,Resource resourceToUpdate){
//method to update a resource , can be called individually or from other method like methodStep3()
}


@Transactional
complexOperationMethod (){
//step1: finding List<Resource> each having ref=uuid value from db
//step2: for each Resource go to db and find its id , replace ref in first step by id 
//step3: insert back the updated List<Resource> in db  

}

methodStep2(){
//for each Resource go to db and find its id , replace ref in first step by id 
}

methodStep3(){
//insert back the updated List<Resource> in db 
//use already defined updateResource(whatToUpdate,resource) method to avoid code duplication
}
All methods within same instance

Теперь, если вызван complexOperationMethod (), начнется новая транзакция, и она продолжит использовать методы methodStep2 и methodStep3, не отмечая их @ Транзакционный, как указано здесь https://www.codesenior.com/en/tutorial/Transactional-method-calling-another-method-without-Transactional-anotation

Но если methodStep3 () не помечен как @Transactional, ошибка блокировщика метания сонара "Требование @Transactional несовместимо с требованием для этого метода".

Если я go опередил и пометил methodStep3 () @Transactional, он будет работать должным образом и ничего не сломает в будущем, когда обновление будет выполняться в каком-то запросе update () и complexOperationMethod () для другого запроса. Кто-нибудь пробовал этот вариант использования раньше? ТИА.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...