慕容羽 2015-12-10 08:19 采纳率: 0%
浏览 1717

hibernate进行分页时,sessionFactory为null报空指针异常

从网上查了许都,都没能解决,不知道是配置文件有问题,还是方法写的有问题

  • 写回答

6条回答 默认 最新

  • 慕容羽 2015-12-10 08:19
    关注

    dao层实现类:

    /**

    • @ClassName: BaseDaoImpl
    • @Description: 基础dao实现
    • @author john
    • @date 2015年2月26日 下午3:27:15
      */
      @SuppressWarnings("unchecked")
      public abstract class BaseDaoImpl implements BaseDao{
      @Resource
      private SessionFactory sessionFactory;
      protected Class clazz;

      public BaseDaoImpl() {
      ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
      this.clazz = (Class) pt.getActualTypeArguments()[0];
      System.out.println("class = " + clazz.getName()+" init over");
      }

      public void save(T entity) {
      getSession().persist(entity);
      }

      public void update(T entity) {
      getSession().update(entity);
      }

      public void delete(ID id) {
      Object obj = getSession().get(clazz, id);
      if(obj!=null) getSession().delete(obj);
      }

      public T getById(ID id) {
      if (id == null) {
      return null;
      }
      return (T) getSession().get(clazz, id);
      }

      public T loadById(ID id) {
      if (id == null) {
      return null;
      }
      return (T) getSession().load(clazz, id);
      }

      public List getByIds(ID[] ids) {
      if (ids == null || ids.length == 0) {
      return Collections.EMPTY_LIST;
      }

      List<T> list =  getSession().createQuery(//
              "FROM " + clazz.getSimpleName() + " WHERE id IN(:ids)")//
              .setParameterList("ids", ids)//
              .list();
      if(list == null) return Collections.EMPTY_LIST;
      return list;
      

      }

      public List getAll() {
      List list = getSession().createQuery(//
      "FROM " + clazz.getSimpleName())//
      .list();
      if(list == null) return Collections.EMPTY_LIST;
      return list;
      }

      public Long getCount(){
      return (Long)getSession().createQuery(//
      "SELECT COUNT(*) FROM "+ clazz.getSimpleName())//
      .uniqueResult();//
      }

      public List getByHQL(String strHQL, Object... params) {
      Query query = getSession().createQuery(strHQL);
      if (params!=null){
      for (int i = 0; i < params.length; i++){
      query.setParameter(i, params[i]);
      }
      }
      return query.list();
      }

      public PageBean getPageBean(int pageNum,int pageSize,HqlHelper hqlHelper) {
      System.out.println("pageNum:"+pageNum);
      System.out.println("pageSize:"+pageSize);
      System.out.println("BaseDaoImpl:"+hqlHelper);
      List parameters = hqlHelper.getParameters();
      System.out.println("parameters:"+parameters);
      System.out.println("@@@@"+hqlHelper.getQueryListHql());
      // 查询本页的数据列表
      Query listQuery = getSession().createQuery(hqlHelper.getQueryListHql());
      if (parameters != null && parameters.size() > 0) { // 设置参数
      for (int i = 0; i < parameters.size(); i++) {
      listQuery.setParameter(i, parameters.get(i));
      }
      }
      listQuery.setFirstResult((pageNum - 1) * pageSize);
      listQuery.setMaxResults(pageSize);
      List list = listQuery.list(); // 执行查询

      // 查询总记录数
      Query countQuery = getSession().createQuery(hqlHelper.getQueryCountHql());
      if (parameters != null && parameters.size() > 0) { // 设置参数
          for (int i = 0; i < parameters.size(); i++) {
              countQuery.setParameter(i, parameters.get(i));
          }
      }
      Long count = (Long) countQuery.uniqueResult(); // 执行查询
      return new PageBean(pageNum, pageSize, list, count.intValue());
      

      }

      protected Session getSession() {
      // if (null==sessionFactory.getCurrentSession()){
      // System.out.println("open获取session:"+sessionFactory.openSession());
      // return sessionFactory.openSession();
      // }
      System.out.println("sessionFactory="+sessionFactory);
      System.out.println("get获取session:"+sessionFactory.getCurrentSession());
      return sessionFactory.getCurrentSession();
      }

    }

    spring配置文件:
    <?xml version="1.0" encoding="UTF-8"?>
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.1.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-4.1.xsd ">

    <!-- TODO -->
    <context:component-scan base-package="org.bhr.dao" />
    <context:component-scan base-package="org.bhr.service" />
    
    <!-- TODO -->
    <context:property-placeholder location="classpath:local_db.properties" />
    
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
    
        <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
        <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
    
        <property name="testConnectionOnCheckin" value="true"></property>
        <property name="automaticTestTable" value="C3P0TestTable"></property>
        <property name="idleConnectionTestPeriod" value="18000"></property>
        <property name="maxIdleTime" value="25000"></property>
        <property name="testConnectionOnCheckout" value="true"></property>
    </bean>
    
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
        <!-- TODO -->
        <property name="mappingLocations" value="classpath:org/bhr/po/*.hbm.xml"></property>
    
    </bean>
    
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!-- TODO -->
        <tx:attributes>
            <tx:method name="get*" read-only="true" />
            <tx:method name="find*" read-only="true" />
            <tx:method name="verify*" read-only="true" />
            <tx:method name="*" />
        </tx:attributes>
    </tx:advice>
    
    <aop:config>
        <!-- TODO -->
        <aop:pointcut expression="execution(* org.bhr.service.*.*(..))"
            id="txPointcut" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
    </aop:config>
    

    报错信息:
    当前页:1
    每页显示记录大小:5
    hql语句org.bhr.util.HqlHelper@1784aed1
    class = java.io.Serializable init over
    pageNum:1
    pageSize:5
    BaseDaoImpl:org.bhr.util.HqlHelper@1784aed1
    parameters:[]
    @@@@FROM WarnInfo o
    sessionFactory=null
    十二月 10, 2015 3:50:54 下午 org.apache.catalina.core.StandardWrapperValve invoke
    SEVERE: Servlet.service() for servlet [springmvc] in context with path [/bhr] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
    java.lang.NullPointerException
    at org.bhr.dao.impl.BaseDaoImpl.getSession(BaseDaoImpl.java:134)
    at org.bhr.dao.impl.BaseDaoImpl.getPageBean(BaseDaoImpl.java:107)
    at org.bhr.util.HqlHelper.buildPageBean(HqlHelper.java:148)
    at org.bhr.web.controller.AdminInfoController.home(AdminInfoController.java:50)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2442)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2431)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:722)

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!