簡體   English   中英

執行SQL查詢時,Hibernate會話為null

[英]Hibernate session is null when executing SQL query

使用SQLQuery q = session.createSQLQuery(query).addEntity("edu", StudentEduPojo.class);執行SQL本機查詢時, SQLQuery q = session.createSQLQuery(query).addEntity("edu", StudentEduPojo.class); JVM引發空指針異常。

DBConnectionDao.class

package com.ms.avalon.master.dao.rdbms;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class DBConnectionDao {

    protected Session session;
    protected DataSource dataSource;
    protected SessionFactory sessionFactory;
    protected HibernateTemplate hibernateTemplate=null;
    protected NamedParameterJdbcTemplate namedJdbcTemplate=null;

    @Autowired
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
        namedJdbcTemplate=new NamedParameterJdbcTemplate(dataSource);
    }

    @Autowired
    public void setSessionFactory(SessionFactory sessionFactory) {
        System.out.println("session created");
        this.sessionFactory = sessionFactory;
        session = sessionFactory.getCurrentSession();
        hibernateTemplate=new HibernateTemplate(sessionFactory);
    }
}

PlacementDaoRdbms.class

package com.ms.avalon.master.dao.rdbms;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.SQLQuery;
import org.hibernate.criterion.DetachedCriteria;
import com.ms.avalon.master.beans.PlacementCaseBean;
import com.ms.avalon.master.dao.PlacementDao;
import com.ms.avalon.master.formbeans.PlacementFormBean;
import com.ms.avalon.master.pojos.studentpojos.StudentEduPojo;
import com.ms.avalon.master.pojos.studentpojos.StudentTestPojo;

public class PlacementDaoRdbms extends DBConnectionDao implements PlacementDao {

    @Override
    public List<StudentEduPojo> searchWithCases(PlacementCaseBean caseBean, PlacementFormBean placementBean) {

        String query = "Some complicated SQL query";

        SQLQuery q = session.createSQLQuery(query)
        .addEntity("edu", StudentEduPojo.class);

        List<StudentEduPojo> list = q.list();

        return list;
    }

}

在PlacementDaoRdbms中的會話上使用函數createSqlQuery時,我得到了NPE。

以下是堆棧跟蹤:

2016年5月11日晚上8:52:17 org.apache.catalina.core.StandardWrapperValve在路徑[/Avalon-1.0]的上下文中為Servlet [dispatcher]調用SEVERE:Servlet.service()引發異常[請求處理失敗; 嵌套異常是java.lang.NullPointerException],其根本原因是com.ms.avalon.master.business上com.ms.avalon.master.dao.rdbms.PlacementDaoRdbms.searchWithCases(PlacementDaoRdbms.java:108)的java.lang.NullPointerException .com.ms.avalon.master.service.impl.PlacementServiceImpl.searchForTalent(PlacementServiceImpl.java:26)上的.TalentCaseHandler.searchForCases(TalentCaseHandler.java:61)在com.ms.avalon.master.controllers.PlacementController.searchForTalent(PlacementController) .java:29)位於sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法),位於sun.reflect.NativeMethodAccessorImpl.invoke(未知源),位於java.lang.reflect.Method處的sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)。在org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerMethod(AnnotationMethodHandlerAdapter.java:427)上的org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) )在org.springframework.web的org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:788)的org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:415)處。 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)上的servlet.DispatcherServlet.doService(DispatcherServlet.java:717)org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java)在javax.servlet.http.HttpServlet.service(HttpServlet.java:727)在javax.servlet.http.HttpServlet.service(HttpServlet.java:646) :303),位於org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52),位於org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52),位於org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)。 org.ap上的core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)的ache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)在com.opensymphony.module.sitemesh.filter.PageFilter處。 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)處的doFilter(PageFilter.java:55)org.apache處的org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)處的doFilter(PageFilter.java:55) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)上的.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java :504),位於org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103),位於org.apache.catalina.valves.ErrorReportValve.invoke(ErrorHostValve.java:103),位於org.apache.catalina.valves。 org.apache.catalina.core.StandardEngineValve.inv上的AccessLogValve.invoke(AccessLogValve.java:950) 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)處的oke(StandardEngineValve.java:116)在org.apache處的org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)處的oke(StandardEngineValve.java:116) org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:316)的.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:611)在java.util.concurrent.ThreadPoolExecutor.runWorker(未知)源代碼)在java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知源)在org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread.run(來源不明)

另外,這是使用父類中的會話的正確方法嗎?

謝謝您的幫助 :)

正在從另一個類中調用PlacementDaoRdbms中的searchWithCases方法(我們將其稱為A)。 我正在使用new關鍵字創建A的對象,這導致DI和@Autowired無法正常工作。 我知道我應該發布完整的代碼,但仍然感謝您的幫助和建議。 讓我知道您是否遇到類似的問題:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM