Вот псевдокод / поток некоторой части моего приложения:
@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 () для другого запроса. Кто-нибудь пробовал этот вариант использования раньше? ТИА.