Search code examples
multithreadinghibernatesessionsession-management

How to reinitialize session in Hibernate with thread context?


Note: This question is related for my previous one.

I am using hibernate.current_session_context_class=thread in my Hibernate configuration and getting Hibernate sessions via SessionFactory.getCurrentSession() as needed. So it does create or give me existing sessions when needed, so I do not take care of this.

This is all great, but what to do when I do get a HibernateException, a ConstraintViolationException for example? Then the current session I acquired before becomes invalid and I cannot use it anymore, not even for reading out some more data (according to many forums I've read). How can I discard and get then the new session within particular scope? I think calling SessionFactory.getCurrentSession() for the 2nd time still will return me the same invalid session!?


Solution

  • For the ThreadLocalSessionContext, the session will be closed when the transaction finsihes. So in this case you should call tx.rollback(), then sessionFactory.getCurrentSession() to start afresh.