Like we all know, not using the @Transactional annotation in a Spring-Hibernate application gives a Hibernate Exception:
Exception in thread "main" org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
I wanted to know what does it mean by "transaction synchronized session"?
It is a Session whose state is synchronized with underlying transaction. For example: after transaction is completed the session closes.
Spring manages it with
TransactionSynchronizationManager
that holds a set ofTransactionSynchronization
adapters.AbstractPlatformTransactionManager
calls those adapters when performing different actions with transaction.Most notable synchronization is
SpringSessionSynchronization
. Among other things it is responsible for flushing session before commit and closing session after transaction is completed.