The default propagation strategy (REQUIRED
) is a reasonable choice for the most of scenarios, therefore you can safely use it unless you have some very special requirements.
In your second case REQUIRED
would work almost the same way as if there were no @Transactional
at DAO methods. The only subtle difference is in rollback-on-exception behavior: transaction is marked as "rollback only" when exception (the one that causes transaction rollback) passes a border of any transactional method, not just a top-level one, so that you won't be able to catch a rollback-causing exception thrown from your DAO method and make transaction commit.
REQUIRES_NEW
in your case is only needed if you want to be able to rollback inner and outer transactions separately.