Java Hibernate、Spring、Dao getSession()NullPointerException

Java Hibernate、Spring、Dao getSession()NullPointerException,java,spring,hibernate,Java,Spring,Hibernate,我得到了错误 java.lang.NullPointerException at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:143) at com.walladverts.model.dao.UserDao.findByUsername(UserDao.java:25) 访问findByUsername中的getSession()时 pac

我得到了错误

java.lang.NullPointerException
at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:143)
at com.walladverts.model.dao.UserDao.findByUsername(UserDao.java:25)
访问findByUsername中的getSession()时

package com.walladverts.model.dao;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import com.walladverts.exceptions.DataNotFoundException;
import com.walladverts.model.entities.User;
import com.walladverts.util.CustomHibernateDaoSupport;@
Repository("userDao")
public class UserDao extends CustomHibernateDaoSupport {
    public void save(User user) {
        getHibernateTemplate().save(user);
    }
    public void delete(User user) {
        getHibernateTemplate().delete(user);
    }
    public User findByUsername(String username) throws DataNotFoundException {
        Session session = getSession();
        Criteria crit = session.createCriteria(User.class);
        System.out.println(username);
        crit.add(Restrictions.eq("username", username));
        crit.setMaxResults(1);
        List < User > users = crit.list();
        System.out.println(users);
        if (users.size() < 1) {
            throw new DataNotFoundException();
        }
        return users.get(0);
    }
}
有人知道为什么会发生这种情况吗?它冻结了我的发展。

编辑:

当Spring Secure尝试登录用户时会发生这种情况。另外,当从控制器调用此方法时,我的SessionFactory工作正常

public abstract class CustomHibernateDaoSupport extends HibernateDaoSupport {
    @Autowired
    @Qualifier("sessionFactory")
    private SessionFactory sessionFactory;

    public Session getSession() {
        return sessionFactory.getCurrentSession();
    }
}


HibernateDaoSupport
在很长一段时间内都有final和无法重写的方法

它最初被认为是通过
减轻xml配置,但将其与
@Autowired
注释混合使用是不可取的


您必须在需要时调用该方法。

我无法重写它,它是HibernateDaoSupport的最终方法。您定义了名为sessionFactory的bean吗?我猜OP接受这个错误答案只是为了提高接受率。
public abstract class CustomHibernateDaoSupport extends HibernateDaoSupport {
    @Autowired
    @Qualifier("sessionFactory")
    private SessionFactory sessionFactory;

    public Session getSession() {
        return sessionFactory.getCurrentSession();
    }
}
public User findByUsername(String username) throws DataNotFoundException {
     Session session = getSession();
     // do sth
}