The simplest answer is:
On whichever method you declare @Transactional
the boundary of transaction starts and boundary ends when method completes.
If you are using JPA call then all commits are with in this transaction boundary.
Lets say you are saving entity1, entity2 and entity3. Now while saving entity3 an exception occur, then as enitiy1 and entity2 comes in same transaction so entity1 and entity2 will be rollback with entity3.
Transaction :
- entity1.save
- entity2.save
- entity3.save
Any exception will result in rollback of all JPA transactions with DB.Internally JPA transaction are used by Spring.