hibernatetemplate.getSessionFactory() 抛出 NullPointerException

hibernatetemplate.getSessionFactory() throws NullPointerException

吾道Class

@Repository("genObj")
public class GeneralQueries {
    HibernateTemplate hibernatetemplate;
    public HibernateTemplate getHibernatetemplate() {
        return hibernatetemplate;
    }
    public void setHibernatetemplate(HibernateTemplate hibernatetemplate) {
        this.hibernatetemplate = hibernatetemplate;
    }
     public String getStringfromQuery(String sql)
{
    SessionFactory sessionFactory=hibernatetemplate.getSessionFactory();
    Session session=sessionFactory.openSession();

    String data=null;
    try
    {
        System.out.println(sql);
        data=session.createSQLQuery(sql).list().toString();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    return data;
}}

此方法returns 数据为字符串

我的控制器Class

@Controller
public class SchoolStudentsConfirmationContrl 
{
    @Autowired
    SchoolStudentsConfirmationIntr schoolstdconfirmservice;
    @Autowired
    GeneralQueries genObj=new GeneralQueries();

    @RequestMapping(value="/getData",method=RequestMethod.GET)
    public ModelAndView getData(@ModelAttribute("schooldetailsform")SchoolDetailsForm formbean,HttpServletRequest request)
    {
        String PageHeading = "";


        try
        {
        String district = request.getSession().getAttribute("dist_code").toString();

        PageHeading = "BAS Students Confirmation for the Academic Year:"+ formbean.getAc_year() + " <br> District:"
                    + genObj.getStringfromQuery("select dist_name from pmss_districts_mst where dist_code=" + district + "")+"";

        mav.setViewName("showreportwithmenu");

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
         return mav;
    }
}

我正在尝试调用 genObj.getStringfromQuery() 方法,但它在行中抛出空指针异常 SessionFactory sessionFactory=hibernatetemplate.getSessionFactory();

我的配置文件

<?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:mvc="http://www.springframework.org/schema/mvc"
    xmlns:tx="http://www.springframework.org/schema/tx" 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.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd">

    <context:annotation-config />
    <context:component-scan base-package="cgg.gov.in.*" annotation-config="true"/>


    <bean id="tiles"   class="org.springframework.web.servlet.view.UrlBasedViewResolver">  
        <property name="viewClass">  
            <value>  
                org.springframework.web.servlet.view.tiles3.TilesView  
            </value>  
        </property>  
    </bean>  

    <bean id="tilesConfigurer"    class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">  
        <property name="definitions">  
            <list>  
                <value>/WEB-INF/tiles.xml</value>  
            </list>  
        </property>  
    </bean>

    <bean id="view" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
    </bean>

    <bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.postgresql.Driver" />
        <property name="url" value="jdbc:postgresql://x.x.x.x/test" />
        <property name="username" value="postgres" />
        <property name="password" value="postgres" />
    </bean>

    <bean class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" name="sessionFactory">
        <property name="dataSource" ref="dataSource" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.autocommit">false</prop>
            </props>
        </property>
         <property name="annotatedClasses" > 
            <list>
                <value>cgg.gov.in.model.login.LoginForm</value>
            </list>
        </property>
    </bean>

        <bean class="org.springframework.orm.hibernate4.HibernateTemplate"  name="hibernatetemplate">
        <property name="sessionFactory" ref="sessionFactory"/>
        </bean>

    <mvc:default-servlet-handler />
    <mvc:annotation-driven />

</beans>

您定义了一个 hibernatetemplate bean。但是您还没有告诉将 GeneralQueries class 中的变量 hibernatetemplate 指向定义的 bean。

您可以通过两种方式做到这一点,

1) 在 xml 中为 GeneralQueries 创建一个 bean 并定义 属性 如下,

<bean name="generalQueries" class="package.GeneralQueries">
    <property name="hibernatetemplate" ref="hibernatetemplate" />
</bean>

您已经定义了 setter。 如果在xml.

中将其定义为bean,请记住从GeneralQueries中删除@Repository

2) 如下所示自动装配 GeneralQueries 中的 hibernatetemplate

@Repository("genObj")
public class GeneralQueries {
    @Autowired
    HibernateTemplate hibernatetemplate;
    //rest of code
}

GeneralQueries 必须在组件扫描下。

注意: 另外,@m-deinum 建议,从 SchoolStudentsConfirmationContrl.

中删除 new GeneralQueries()