Spring transactions and Hibernate session

When using Spring transaction proxy org.springframework.transaction.interceptor.TransactionProxyFactoryBean with an Hibernate transaction manager org.springframework.orm.hibernate.HibernateTransactionManager you should know that Hibernate session will be opened at the start of the transaction and closed at the end. Any modification to persistent objects will be flushed to database, so be careful when in service managers (aka business delegates or facades) you touch Hibernate persisted objects. What I’ve done is return clones of them in my DAOs so they can be used as Transfer Objects, changing its state will not change database state.

Be sure that in the TransactionProxyFactoryBean bean definition you add transactionAttributes for every method in the facade or the session will be closed every time a DAO call spring HibernateTemplate.execute method. I forgot this for get* methods and got errors difficult to debug.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s