简体   繁体   English

编写器时休眠空指针异常

[英]hibernate null pointer exception at writer

I am working on a spring project that includes hibernate. 我正在从事一个包含休眠的春季项目。 I frequently have problems getting objects from the database The error is as below: 我经常遇到从数据库获取对象的问题,错误如下:

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)]

This error comes up at this point in my dao implementation: 此错误在我的dao实现中出现:

<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>

I am using annotations for my configurations and not xml I have an abstract dao connector 我正在为配置使用注释,而不是xml我有一个抽象的dao连接器

<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>

I would upload any part of my code that would be of use in aiding me with my issue, thanks 我会上传代码中有助于我解决问题的任何部分,谢谢

UPDATE: 更新:

I seemed to have solved by changing c.getName() to c.getSimpleName() in order to get the class name 我似乎已经解决了通过将c.getName()更改为c.getSimpleName()以获得类名的方法

Strange !!! 奇怪!

Can you please modify your query like this and give it a shot? 您可以像这样修改查询并试一下吗? I have added 'AS' before the alias. 我在别名之前添加了“ AS”。 I would be surprised if this turned out to be the problem. 如果原来是问题,我会感到惊讶。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM