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..!!!