This week's giveaway is in the Spring forum.
We're giving away four copies of REST with Spring (video course) and have Eugen Paraschiv on-line!
See this thread for details.
The moose likes Spring and the fly likes Spring Transactions with hibernate Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of REST with Spring (video course) this week in the Spring forum!
JavaRanch » Java Forums » Frameworks » Spring
Bookmark "Spring Transactions with hibernate" Watch "Spring Transactions with hibernate" New topic

Spring Transactions with hibernate

Reddy Prashanth
Ranch Hand

Joined: Aug 09, 2005
Posts: 61

I am a spring and hibernate learner now. Trying to understand the concept of transactions.
I am using hibernate template in my DAO classes and using annotation to declare the transactions. So far everything is good.

I have a GateWayService and AccountDAO , both are annotated with @Transactional. I am using AccountDAO in the GateWayService as shown below.

And here is

Now the problem is, even if I change the propagation level in the @Transaction annotation to any values (like ..supports/required/notsupported ), I am not seeing any change or exceptions . My programe is working fine.

If there is already one transaction initiated in the GateWayService class, and if I am calling AccountDAO which is also having a Transaction, Iam expecting that I should get some different behavior when i change the propagation levels. Is that true ???

Or, the underlying hibernate template always creating one session and hibernate transaction manager creating/using the same transactions in the current thread ?

Can some one help me to understand this.

And in the hibernate configuration i have the current session context as "thread"
<prop key="hibernate.current_session_context_class">thread</prop>

Mark Spritzler

Joined: Feb 05, 2001
Posts: 17276

OK two things I highly recommend.

1) Stop using HibernateTemplate. In the current versions of Spring and Hibernate you are gaining absolutely no value, just adding a level of unnecessary indirection.
2) Only set transaction stuff at the Service layer, not in the Respository/DAO layer. The Transaction at the Service level is automatically wrapping all your calls to your Repository/DAO layer


Perfect World Programming, LLC - iOS Apps
How to Ask Questions the Smart Way FAQ
Reddy Prashanth
Ranch Hand

Joined: Aug 09, 2005
Posts: 61
Hi Mark,

Thank you for the update.
So what is the preferred way of using hibernate in spring. Is using the sessionfactory and session directly in my DAO better way ?

Actually I am trying to test that concept of transaction propagation. Will spring always use the same transaction in the current thread ? then how can I test the propagation levels. I appreciate if you could you provide one scenario.

I agree. Here's the link:
subject: Spring Transactions with hibernate
It's not a secret anymore!