I am using Spring MVC with Hibernatedaosupport
for my DAO classes. Confused here where to start the transaction, whether it should be in service layer or DAO layer?
My view interacts with Service layer. DAO's are injected into services.
What is the right way to use Spring MVC with Hibernate in DAO, service layer architecture?
IMHO the transactions should go to service layer. Typically one business transaction consists of several queries and updates. If you place @Transactional
only on DAO layer, each query and update will run in a separate transaction, which effectively defeats the purpose of transactions.
But if services are @Transactional
, each database interaction joins one main transaction started when web layer entered the service layer. Note that in this case if web layer runs several service methods, each of them will run in a separate transaction (the same problem shifted one level up). But placing @Transactional
in web layer might introduce unexpected side effects like N+1 problem, which would have been caught otherwise. Thus try to keep one business transaction in one service method called from web layer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With