I’ve discussed this with other Spring developers and concluded that the issue is correct.
There is one case that will break the transactional behavior:
If, in the example, the save method will throw a RuntimeException and the saveWithEventsAndPersons will catch the exception the transaction of the save method will not be marked as rollback-only.
Hello. I recently found out that the interpretation was changed, and now it doesn’t allow @Transactional methods within another @Transactional method, even with the correct propagation level.
In my opinion, this is a false positive.
If we consider the behavior being different between proxy and direct invocation as a code smell, then annotating the whole class would have the same effect, and every method should be violating S6809.