Friday, June 26, 2015

org.hibernate.HibernateException: No Session found for current thread

I am working one Spring MVC project in which I have integrated Spring with hibernate and most of the time, I use to get this error message while performing database operation ..

org.hibernate.HibernateException: No Session found for current thread

Reason : This is happening because I have missed declaring the transaction in my Spring Application. sessionFacory needs transaction to work.

Solution :

Define transaction manager in your Spring configuration file. Here is my spring-config.xml file :


<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${db.driverClassName}" />
<property name="jdbcUrl"
value="jdbc:mysql://${db.host}:${db.port}/${db.name}" />
<property name="user" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
depends-on="provDB">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="PACKAGE_NAME" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${db.dialect}</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>

<bean id="dao" class="DAO_IMPL_CLASS.DaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

and Add @Transactional annotation on your service function

@Override
@Transactional
public String saveConfiguration(...) {
daoImpl.saveConfiguration(configuration);
return "issue_resolved";
}

I guess, It can be useful to many prople.. Happy Coding..!!!

1 comment: