2015-09-14 61 views
2

我会抛出这个issue但我发现了一个解决方案,但我有一些错误做到这一点,所以我问这个新的问题,这是我的代码:NullPointerException异常与entityClass

@Service 
public class GestionAOService { 

    @Autowired 
    private GenericDao<AoFollow, Integer> ao_follow_dao; 

    @Transactional 
    public void follow_ao(Integer idcontact , Integer idao) { 
     ao_follow_dao.create(new AoFollow(new AppelOffre(idao) , new Contact(idcontact))); 

     ao_follow_dao.read(1); 
    } 
    ..... 

我的配置

@Configuration 
@ComponentScan("service") 
public class AnnotationContextConfiguration { 

    @Bean(autowire = Autowire.BY_NAME) 
    public GenericDaoJpaImpl<AoFollow, Integer> ao_follow_dao() { 
     System.out.println("Autowire.BY_NAME"); 
     return new GenericDaoJpaImpl<AoFollow, Integer>(AoFollow.class); 
    } 

} 

的问题是,什么都没有发生的时候我做ao_follow_dao.read(..);中,创建(插入)是好,但我得到了NullPointerException INT这一水平的回报this.entityManager.find(entityClass, id);

@Override 
public T read(PK id) { 
    return this.entityManager.find(entityClass, id); 
} 

enter image description here

我认为豆是不正确初始化@Configuration因为它是第一次,当我尝试它。

我的小鬼类

@Repository 
public class GenericDaoJpaImpl<T, PK extends Serializable> 
              implements GenericDao<T, PK> { 

    protected Class<T> entityClass; 

    @PersistenceContext 
    protected EntityManager entityManager; 



    public GenericDaoJpaImpl() { 

    } 

    public GenericDaoJpaImpl(Class<T> entityClass) { 
     this.entityClass = entityClass; 
    } 

    @Override 
    public T create(T t) { 
     this.entityManager.persist(t); 
     return t; 
    } 

    @Override 
    public T read(PK id) { 
     return this.entityManager.find(entityClass, id); 
    } 

    @Override 
    public T update(T t) { 
     return this.entityManager.merge(t); 
    } 

    @Override 
    public void delete(T t) { 
     t = this.entityManager.merge(t); 
     this.entityManager.remove(t); 
    } 

    @Override 
    public void delete(Set<T> ts) { 
     for(T t : ts){ 
      t = this.entityManager.merge(t); 
      this.entityManager.remove(t); 
     } 
    } 
} 

我的界面:

public interface GenericDao<T, PK extends Serializable> { 

    T create(T t); 
    T read(PK id); 
    T update(T t); 
    void delete(T t); 
    void delete(Set<T> ts); 

} 

我还有XML配置文件

<beans ... > 

    <context:property-placeholder location="persistence-mysql.properties" /> 
    <jpa:repositories base-package="repository"/> 


    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     ... 
    </bean> 

    <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
     <property name="showSql" value="true" /> 
    </bean> 

    <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource"> 
     ... 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory"/> 
    </bean> 

    <context:component-scan base-package="service"/> 
    <context:component-scan base-package="dao"/> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 

</beans> 

完整堆栈跟踪

java.lang.NullPointerException 
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2508) 
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2495) 
    at org.hibernate.internal.SessionImpl.byId(SessionImpl.java:1043) 
    at org.hibernate.internal.SessionImpl.get(SessionImpl.java:955) 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1110) 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1068) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:262) 
    at com.sun.proxy.$Proxy42.find(Unknown Source) 
    at dao.GenericDaoJpaImpl.read(GenericDaoJpaImpl.java:46) 
    at service.GestionAOService.follow_ao(GestionAOService.java:88) 
    at service.GestionAOService$$FastClassBySpringCGLIB$$8fa00f17.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:708) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644) 
    at service.GestionAOService$$EnhancerBySpringCGLIB$$a32311b9.follow_ao(<generated>) 
    at controller.GestionAO.FollowAO(GestionAO.java:64) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    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:104) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:618) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:67) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:106) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    at org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:142) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:534) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 

回答

2

添加@Transactional注释到您的服务:

@Service 
@Transactional 
public class GestionAOService { 
    ... 
} 

,并确保您AnnotationContextConfiguration类是由类似的服务和DAO Spring框架扫描的包。

假设你的类是包装上的config,该行添加到您的Spring配置:

<context:component-scan base-package="config"/> 
+0

它的工作原理,但看看我的编辑我有'读取(PK ID)的问题' – Youssef

+0

能你提供了NullPointerException的完整堆栈跟踪? –

+0

它在问题 – Youssef