2013-08-14 2 views
0

Я новичок в Spring и пытаюсь интегрировать Spring и Hibernate. Но в SessionFactory я столкнулся с nullpointer.Spring AnnotationSessionFactoryBean NullPointerException

Описание ошибки:

java.lang.NullPointerException 
com.ume.dao.UserDaoImpl.openSession(UserDaoImpl.java:29) 
com.ume.dao.UserDaoImpl.getUser(UserDaoImpl.java:34) 
com.ume.LoginController.getUserCredentials(LoginController.java:39) 

Другая ошибка Описание

org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here 
    org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63) 
    org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:544) 
com.ume.dao.UserDaoImpl.openSession(UserDaoImpl.java:31) 
com.ume.dao.UserDaoImpl.getUser(UserDaoImpl.java:37) 
com.ume.service.UserServiceImpl.getUser(UserServiceImpl.java:23) 

Мой dispatchar-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
      http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <context:property-placeholder location="classpath:jdbc.properties" /> 
<context:component-scan base-package="com.nptest" /> 
<mvc:annotation-driven /> 


    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
      <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
      <property name="prefix" value="/WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 
    <bean class="org.springframework.context.support.ResourceBundleMessageSource" id="messageSource"> 
    <property name="basename" value="messages" /> 
</bean> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${database.driver}" /> 
    <property name="url" value="${database.url}" /> 
    <property name="username" value="${database.user}" /> 
    <property name="password" value="${database.password}" /> 
</bean> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="annotatedClasses"> 
     <list> 
      <value>com.nptest.pojo.UserPojo</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
     </props> 
    </property> 
</bean> 

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



</beans> 

Мой DAOImplementation класс

@Repository 
public class UserDaoImpl implements UserDao{ 

@Autowired 
    private SessionFactory sessionFactory; 

private Session openSession() 
{ 

    return sessionFactory.getCurrentSession(); 
    } 
    public UserPojo getUser(String username, String password) 
    { 
     List<UserPojo> userlist=new ArrayList<UserPojo>(); 
     Query query=openSession().createQuery("from UserPojo u WHERE u.login=:username AND u.userpwd=:password"); 
     query.setParameter("login",username); 
    query.setParameter("password",password); 
     System.out.println("MADAN Query "+ query); 
     userlist=query.list(); 
     if(userlist.size()>0) 
      return userlist.get(0); 
    else return null; 

    } 

} 

Моя_служба Интерфейс

public interface UserService { 
public UserPojo getUser(String username,String password); 

} 

Мой класс Внедрение Service

@Service 
public class UserServiceImpl implements UserService { 

    @Autowired 
    private UserDao userDao; 

    @Transactional 
    public UserPojo getUser(String username, String password) { 
     return userDao.getUser(username, password); 
} 

Мой класс контроллера, где я сделать эти вызов, я экземпляр класса Service этим

@Autowired 
private UserService userservice; 

И в методе, который я назвал

UserPojo user=userservice.getUser(username, password); 

ответ

1

выглядит, как вы создали экземпляр UserDaoImpl вручную, то SessionFactory не получило проводное, пожалуйста, напишите код, как вы используете UserDaoImpl

добавить аннотацию к UserDaoImpl и поместить его под пакетом com.nptest

package com.nptest.dao; 

@Repository public class UserDaoImpl implements UserDao 

затем autowired UserDaoImpl в приложении

--edit--

, чтобы включить аннотацию на основе передам, вы должны добавить

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

в контекстном XML

+0

Спасибо большое. После добавления репозитория и аннотации Transactional, я получаю еще одно исключение. Я обновил свой код и исключение. Пожалуйста, просмотрите. Я думаю, что мы очень близки к решению. –

+0

Превосходный помощник! Готово Наконец !! –

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