2013-04-17 2 views
0

Я получаю сообщение об ошибке.Hibernate, Spring, Dao getSession() NullPointerException

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

при доступе getSession() в findByUsername

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); 
    } 
} 

Родительский класс:

package com.walladverts.util; 
import org.hibernate.SessionFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 
public abstract class CustomHibernateDaoSupport extends HibernateDaoSupport {@ 
    Autowired 
    public void init(SessionFactory factory) { 
     setSessionFactory(factory); 
    } 
} 

ли кто-нибудь имеет представление о том, почему это происходит? Это замораживает меня для развития.

EDIT:

Это происходит, когда Spring Secure пытается войти в систему пользователем. Также мой SessionFactory работает нормально, когда вы вызываете этот метод из Controller.

ответ

1
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 
} 
+0

Я не могу переопределить его, это окончательный метод из HibernateDaoSupport. –

+0

Определяли ли вы фасоль с именем sessionFactory? –

+0

Я предполагаю, что этот неправильный ответ был принят ОП только для увеличения скорости приема. – Vadzim

0

HibernateDaoSupport в течение очень долгого времени имеет конечные getSessionFactory и setSessionFactory методы, которые не могут быть переопределены.

Первоначально предполагалось уменьшить конфигурацию xml через <property name="sessionFactory" ref="sessionFactory" />, но смешение @Autowired аннотация also possible.

Вам нужно просто позвонить по телефону getSession() при необходимости.

Смежные вопросы