2017-10-04 1 views
0

최대 절전 모드가 포함 된 봄 프로젝트 작업 중입니다. 내가 자주 문제가 데이터베이스 오류에서 개체를 받고있다은 다음과 같습니다 :작가에서 최대 절전 모드 null 포인터 예외

<code> 
    @Override 
    public Object getObject(Class c,int id)throws DsvrtException { 
     Transaction transaction = null; 
     try{ 
      transaction = getOpenSession().beginTransaction(); 
      String sql = "FROM "+c.getName()+" C WHERE C.id = :id"; 
      Query q = getOpenSession().createQuery(sql); 
      q.setParameter("id", id); 
      List list = q.list(); 
      if(list.isEmpty()) 
       throw new NoResultException("No Result"); 
      transaction.commit(); 
      return list.get(0); 
     } 
     catch(HibernateException | NoResultException|NullPointerException e){ 
      if(transaction!=null)transaction.rollback(); 
      throw new DsvrtException(c,"Failed to get Object with ID : "+id+Arrays.toString(e.getStackTrace())); 
     } 
    } 
</code> 

내 구성에 대한 주석을 사용하고 있습니다 :

03-10-17 20:51:46 INFO DsvrtLog - IncidenceController::New Incidence Reported rape 
03-10-17 20:51:46 ERROR DsvrtLog - 
Report::Failed to get Object with ID : 1 
[java.io.Writer.write(Writer.java:157) 
java.io.BufferedWriter.newLine(BufferedWriter.java:243) 
java.io.PrintStream.newLine(PrintStream.java:544) 
java.io.PrintStream.println(PrintStream.java:807) 
org.hibernate.hql.internal.ast.util.ASTPrinter.showAsString(ASTPrinter.java:100) 
org.hibernate.hql.internal.ast.QueryTranslatorImpl.showHqlAst(QueryTranslatorImpl.java:283) 
org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:274) 
org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180) 
org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) 
org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105) 
org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80) 
org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168) 
org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221) 
org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199) 
org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1735) 
com.tivasgroups.apps.dsims.dao.DsimsDaoImpl.getObject(DsimsDaoImpl.java:108) 
com.tivasgroups.apps.dsims.service.ManageIncidenceImpl.saveIncidence(ManageIncidenceImpl.java:82) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:606) 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) 
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262) 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 
com.sun.proxy.$Proxy134.saveIncidence(Unknown Source) 
com.tivasgroups.apps.dsims.controller.IncidenceController.ManageIncidence(IncidenceController.java:318) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:606) 
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:214) 
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749) 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:690) 
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509) 
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104) 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) 
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) 
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
java.lang.Thread.run(Thread.java:745)] 

이 오류는 내 DAO 구현이 시점에서 온다 하지 XML 는 내가 어떤 부분을 업로드 할

<code> 
public abstract class AbstractDaoConnector { 
    public Class persistentClass; 
    private org.hibernate.id.PersistentIdentifierGenerator PK; 
    private static final ThreadLocal<Session> localThread = new ThreadLocal(); 
    @Autowired 
    protected SessionFactory sessionFactory; 
    protected Session getOpenSession()throws DsvrtException{ 
    Session session = localThread.get(); 
    if (session == null||!session.isOpen()) { 
     if(sessionFactory==null)throw new DsvrtException(AbstractDaoConnector.class,"Session Factory is null"); 
     session = sessionFactory.openSession(); 
     localThread.set(session); 
    } 
    return session; 
    } 
    public void closeSession() throws DsvrtException { 
     try{ 
     Session session = (Session) localThread.get(); 
     localThread.set(null); 
     if (session != null) { 
      session.close(); 
     } 
     } 
     catch(HibernateException e){ 
      throw new DsvrtException(AbstractDaoConnector.class,"Failed to close Session"); 
     } 
    } 
    public void persist(Object object) throws DsvrtException{ 
     getOpenSession().persist(object); 
    } 
    public void delete(Entity entity) throws DsvrtException{ 
     getOpenSession().delete(entity); 
    } 
} 
</code> 

추상 DAO 커넥터를 가지고 내 내 문제로 날을 돕는에서 사용이 될 것입니다 코드, 감사

UPDATE :

내가 클래스 이름을 얻기 위해 c.getSimpleName()c.getName() 을 변경하여 해결 한 듯

+0

getObject에서 예외의 원인을 삼키고 있습니다. NoResultException이 NPE의 범인이 될 수도 있지만 e.printStackTrace를 추가하거나 예외 메시지의 누락 부분을 표시해야합니다. – shinjw

+0

여기에 오류의 시작점을 추적했습니다. 'Query q = getOpenSession(). createQuery (sql); 감사합니다. – Gafar

답변

0

이상한 !!!

위와 같이 검색어를 수정하여 한번 알려주시겠습니까? 별칭 앞에 'AS'를 추가했습니다. 이것이 문제로 밝혀지면 놀랄 것입니다.

String sql = "FROM "+c.getName()+" AS C WHERE C.id = :id"; 
+0

이 문제가 아니 었습니다. npe는 createQuery 문에 있습니다. 나는 그것이 최대 절전 모드 자체와 관련이 있다고 생각하지만 웹상의 다른 곳에서 유사한 문제를 발견 할 수 없었다. – Gafar

+0

그냥 직감으로 운전자 문제가 될 수 있을까? –

+0

하지만 동일한 mysql 드라이버는 다른 모든 프로젝트에서 작동했으며 심지어 현재의 문제도 전에는이 문제가 없었습니다. 업데이트를 확인 하겠지만, 문제가 있다면, – Gafar

관련 문제