Using
@Transactional:
In proxy mode (which is the default), only external method calls coming in through the proxy are intercepted.
This means that self-invocation (in effect, a method within the target object calling another method of the target object) does not lead to an actual
transaction at runtime even if the invoked method is marked with @Transactional.