2016-06-12 2 views
0

시험용으로 약간의 웹 응용 프로그램을 개발 중이지만 Dao 메서드에 몇 가지 문제가 있습니다. 모두 NullPointerException을 반환합니다. Administrator.javaDAO 메서드는 모두 NullPointerException을 반환합니다.

public class AdministratorDaoJPA implements AdministratorDao { 

    @PersistenceContext(unitName = "clinic-unit", type = PersistenceContextType.EXTENDED) 
     private EntityManager em; 

     @Override 
     public Administrator findByUsername(String username){ 
      Query query = em.createQuery("SELECT a FROM Administrator a WHERE a.username=?"); 
      return (Administrator)query.setParameter(1,username).getSingleResult(); 
     } 

그리고있다 :

@Entity 
@NamedQuery(name="allAdministrators", query="SELECT a FROM Administrator a") 
public class Administrator { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    @Column(unique = true, nullable = false) 
    private String username; 
    @Column(nullable = false) 
    private String name; 
    @Column(nullable = false) 
    private String surname; 
    @Column(nullable = false) 
    private String pwd; 

    public Administrator(){} 

    public Administrator(String username, String name, String surname, String pwd) { 
     this.username=username; 
     this.name = name; 
     this.surname=surname; 
     this.pwd = pwd; 
    } 


    public String getUsername() { 
     return this.username; 
    } 


    public void setUsername(String username) { 
     this.username = username ; 

    } 

    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getPwd() { 
     return this.pwd; 
    } 

    public void setPwd(String pwd) { 
     this.pwd = pwd; 
    } 

    public String getSurname() { 
     return surname; 
    } 


    public void setSurname(String surName) { 
     this.surname = surName; 
    } 
    @Override 
    public boolean equals(Object o) { 
     Administrator adm = (Administrator) o; 
     return adm.getUsername().equals(this.getUsername()); 
    } 

    @Override 
    public int hashCode() { 
     return this.getUsername().hashCode(); 
    } 

    @Override 
    public String toString() { 
     final StringBuilder sb = new StringBuilder(); 
     sb.append("Adinistrator"); 
     sb.append("{id='").append(id); 
     sb.append(", name='").append(name); 
     sb.append(", surname='").append(surname); 
     sb.append(", username='").append(username); 
     sb.append("}\n"); 
     return sb.toString(); 
    } 
} 

그리고 마지막의 persistence.xml :이 DAO이다

@Stateless(name = "administratorFacade") 
    public class AdministratorFacade { 

    @PersistenceContext(unitName = "clinic-unit") 
    private EntityManager em; 

    public Administrator getAdministrator(String username){ 
     AdministratorDaoJPA administratorDao = new AdministratorDaoJPA(); 
     Administrator administrator = administratorDao.findByUsername(username); 
     return administrator; 
    } //An example of method that uses DAO 

:

은 외관이다

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 

    <persistence-unit name="clinic-unit" transaction-type="JTA"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>PostgreSQL Database</jta-data-source> 

     <class>it.clinic.model.Indicator</class> 
     <class>it.clinic.model.Administrator</class> 
     <class>it.clinic.model.Exam</class> 
     <class>it.clinic.model.ExamTypology</class> 
     <class>it.clinic.model.Medic</class> 
     <class>it.clinic.model.Patient</class> 
     <class>it.clinic.model.Prerequisite</class> 

     <properties> 
      <!-- ad ogni esecuzione viene creato lo schema, cancellando il contenuto delle tabelle 
      <property name="hibernate.hbm2ddl.auto" value="create"/> --> 

       <!-- SQL dialect --> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> 

      <!--- Per avere info sulle istruzioni SQL inviate al db --> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.format_sql" value="true" /> 
      <property name="hibernate.hbm2ddl.auto" value="update"/> 
      <property name="hibernate.archive.autodetection" value="class"/> 

     </properties> 
    </persistence-unit> 
</persistence> 

스택 트레이스 :

java.lang.NullPointerException이 it.clinic.persistence.ExamTypologyDaoJPA.findAll (ExamTypologyDaoJPA.java:54) it.clinic.facade.AdministratorFacade.getAllExamTypologies (AdministratorFacade.java:53) sun.reflect.NativeMethodAccessorImpl.invoke0 (기본 방법) sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method의. invoke (Method.java:498) org.apache.openejb.core.interceptor.ReflectionInvocationContext $ 호출 .invoke (ReflectionInvocationContext.java:205) org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed (ReflectionInvocationContext.java:186) org.apache.openejb.monitoring.StatsInterceptor.record (StatsInterceptor.java:181) org.apache.openejb.monitoring.StatsInterceptor.invoke (StatsInterceptor.java:100) sun.reflect.NativeMethodAccessorImpl.invoke0 (기본 방법) sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) sun.reflect. DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke (Method.java:498) org.apache.openejb.core.interceptor.ReflectionInvocationContext $ Invocation.invoke (ReflectionInvocationContext.java:205)(InterceptorStack.java:85) org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed (ReflectionInvocationContext.java:186) .stateless.StatelessContainer._invoke (StatelessContainer.java:236) org.apache.openejb.core.stateless.StatelessContainer.invoke (StatelessContainer.java:203) org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod (EjbObjectProxyHandler 된 .java : 265) org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod (EjbObjectProxyHandler.java:260) org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke (EjbObjectProxyHandler.java:89) 조직도. (BaseEjbProxyHandler.java:347),it.clinic.facade.AdministratorFacade $$ LocalBeanProxy.getAllExamTypologies (IT/클리닉/외관/AdministratorFacade.java) it.clinic.controller.ExamTypologyController.examTypologiesList (ExamTypologyController.java:35) sun.reflect.NativeMethodAccessorImpl.invoke0 (기본 방법) sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke (Method.java:498) org.org.apache.tomee.mojarra.TomEEInjectionProvider.invokePostConstruct (TomEEInjectionProvider.java:57) com.sun.faces.mgbean.BeanBuilder.invokePostConstruct (BeanBuilder. java : 221) com.sun.faces.mgbean.BeanBuilder.build (BeanBuilder.java:103) com.sun.faces.mgbean.BeanManager.createAndPush (BeanManager.java:409) com.sun.faces.mgbean .BeanManager.create (BeanManager.java:269) com.sun.faces.el.ManagedBeanELResolver.resolveBean (ManagedBeanELResolver.java:257) com.sun.faces.el.ManagedBeanELResolver.getValue (ManagedBeanELResolver.java:117) com.sun.faces.el.DemuxCompositeELResolver._getValue (DemuxCompositeELResolver.java:176) com.sun.faces.el.DemuxCompositeELResolver.getValue (DemuxCompositeELResolver.java:203) com.sun.faces.el.ChainTypeCompositeELResolver.getValue (ChainTypeCompositeELResolver.java:90) org.apache.jasper.el.JasperELResolver.getValue (JasperELResolver.java:96) org.apache.el.parser.AstIdentifier.getValue (AstIdentifier.java:80) org.apache.el.parser.AstValue.getValue (AstValue.java:137) org.apache. org.apache.jasper.el.JspValueExpression.getValue (JspValueExpression.java:115) org.apache.taglibs.standard.tag.common. ForEachSupport.prepare (ForEachSupport.java:151) LeopTagSupport.doStartTag (LoopTagSupport.java:256) org.apache.jsp.ExamTypologies_jsp._jspx_meth_c_005fforEach_005f0 (ExamTypologies_jsp.java:280) org.apache.jsp.ExamTypologies_jsp._jspService (ExamTypologies_jsp.java:232) org.apache.jasper.runtime.HttpJspBase.service (HttpJspBase.java : 70) javax.servlet.http.HttpServlet.service (HttpServlet.java:729) org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:438) org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:396) org.apache.jasper.servlet.JspServlet.service (JspServlet.java:340) javax.servlet.http.HttpServlet.service (HttpServlet.java:729) org.apache.tomcat. websocket.server.WsFilter.doFilter (WsFilter.java:52) com.sun.faces.context.ExternalContextImpl.dispatch (Exte rnalContextImpl.java:642) com.sun.faces.application.view.JspViewHandlingStrategy.executePageToBuildView (JspViewHandlingStrategy.java:363) com.sun.faces.application.view.JspViewHandlingStrategy.buildView (JspViewHandlingStrategy.java:153) 닷컴 .sun.faces.lifecycle.RenderResponsePhase.execute (RenderResponsePhase.java:99) com.sun.faces.lifecycle.Phase.doPhase (Phase.java:101) com.sun.faces.lifecycle.LifecycleImpl.render (LifecycleImpl .java : 219) org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52) server.httpd.WebBeansFilter.doFilter (WebBeansFilter.java:52)

Tomee와 JSF 2.2에서 JPA를 사용하고 있습니다. 나는 이것이 당신은 당신의 DAO를 얻을 수

new AdministratorDaoJPA() 

을 사용하고

+0

당신이 NPE 스택 추적을 추가하고 가능성이 NPE의 상단에 관련 소스의 라인을 확인해야한다 : 당신은 무엇을 주입해야 할 것은 DAO이다. – LhasaDad

+0

추가됨, 도움을위한 thx –

답변

1

을 :)를 통해 당신이 가고 나에게 도움이되기를 바랍니다. 따라서 컨테이너는 해당 객체에 아무 것도 삽입 할 수 없으므로 entityManager 필드의 기본값은 null입니다.

주입을 수행하려면 컨테이너가 객체를 만들고 삽입해야합니다.

또한 외관상 엔티티 관리자가 필요하지 않으므로 거기에 주입 할 필요가 없습니다.

@Inject 
private AdministratorDaoJPA administratorDao; 
+0

개인 변수를 AdministratorFacade 클래스에 추가하고 주석 "@Inject"를 넣어야합니까? 나는 건물을 정면에서 삭제했습니다. 이제는 다오에서만 존재합니다. –

+0

예. 그것이 당신이해야 할 일입니다. 답변에 표시된대로. –

관련 문제