hibernate hibernate-4.x java spring spring-3

No Session found for current thread (Spring 3.1.X and Hibernate 4)

I’m trying to set up my project using Spring 3.1 and Hibernate 4. I’ve been following some tutorials online. I’m getting a strange error that according to the spring forums should have been fixed with Spring 3.1. Spring Bug Tracker

When my service calls getCurrentSession(), it throws the following exception:

org.hibernate.HibernateException: **No Session found for current thread**] with root cause org.hibernate.HibernateException: No Session found for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession( at

****EDIT: updated my spring-dao.xml according to the Spring Spring 3.1 Documentation for Transactions. I’ve tried swapping out my datasource with a org.apache.commons.dbcp.BasicDataSource. Are there any properties I am missing from my configuration that could be causing this? ****

Here’s my spring-dao.xml:

 <!-- Enable annotation style of managing transactions -->
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<!-- Declare a datasource that has pooling capabilities-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:minPoolSize="10" />
<!-- Declare a transaction manager-->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory" />

My User bean (

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
public class User implements Serializable {
private static final long serialVersionUID = -5527566191402296042L;
@Column(name = "idusers")
private Integer user_id;
private String loginName;
private String password;
private String role;
private Integer congregation_id;
public Integer getUser_id() {
return user_id;
public void setUser_id(Integer user_id) {
this.user_id = user_id;
public String getLoginName() {
return loginName;
public void setLoginName(String loginName) {
this.loginName = loginName;
public String getPassword() {
return password;
public void setPassword(String password) {
this.password = password;
public String getRole() {
return role;
public void setRole(String role) {
this.role = role;
public Integer getCongregation_id() {
return congregation_id;
public void setCongregation_id(Integer congregation_id) {
this.congregation_id = congregation_id;
public String toString() {
return "user_name: " + this.loginName + " congregation_id: " + this.congregation_id.toString();

And finally my service…

import java.util.List;
import javax.annotation.Resource;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
public class CongregationUserService {
protected static Log logger = LogFactory.getLog(CongregationUserService.class);
private SessionFactory sessionFactory;
public List<User> getAllUsers() {
logger.debug("getting all users");
//Exception is thrown on this next line:
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("FROM users");
return query.list();

I realize that my datasource is probably not getting used. If I have forgotten to include any configurations I can update this post. Also if the Tomcat startup logs are needed I can provide them as well.

I had this problem with spring-4.0.6 and hibernate-4.3.6.

Solution is to move all annotation-driven, component-scan, annotation-driven directives from root-context.xml to servlet-context.xml:

<mvc:annotation-driven />
<context:component-scan base-package="ru.dd.demo" />
<tx:annotation-driven transaction-manager="transactionManager" />

dataSource, sessionFactory and transactionManager can be still defined at root-context.xml.