I do basically the same thing. If a method tries to start a transaction when a transaction is already open then it's immediately rejected.
I don't really like automatic transaction joining behaviour because it makes it hard to reason about the application behaviour. Will this transactional method commit when it returns? It's impossible to tell without looking at who's calling it.
It also encourages annoying behaviour like, oh this method uses the database, better make it @Transactional.
Nice idea to write that stuff down. Something that flummoxed me for a while was how Pokemon Yellow does the Pikachu sound, since the Game Boy doesn't really support sample-based audio. Turns out it does something akin to spending 100% of its CPU time turning the sound on and off to play the samples.
I don't really like automatic transaction joining behaviour because it makes it hard to reason about the application behaviour. Will this transactional method commit when it returns? It's impossible to tell without looking at who's calling it.
It also encourages annoying behaviour like, oh this method uses the database, better make it @Transactional.