8
votes

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?

3
@JustinThomas That's like helpful, but different.Dave Newton

3 Answers

21
votes

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.

0
votes

Obviously DAO layer. Anything that connects to data access layer should be in DAO layer and (preferably) annotated with @Repository and your service ( annotated with @Service) should have a handle to DAO instance.

A service can call multiple DAOs but not the other way round. DAOs should be atomic in nature.

If you are starting a transaction then it should be in service layer in my opinion which supports my previous statement where I mention DAOs should be atomic in nature.

0
votes

There is a complete information for the Service layers, DAO layer, Entities and Controllers. It has full tutorial with short description for each module.

Site: Spring MVC With Hibernate CRUD

Or You may visit YouTube Channel: Spring MVC with Hibernate CRUD VIDEO