当表已在数据库

时间:2016-12-11 12:55:48

标签: java jpa ejb

我的DAO类有一个很大的问题,当我想要持久化一个新实体时,我从我的wildfly服务器得到一个NullPointerException。

我有一个名为VeranstaltungAnlegenMB

的ManagedBean
package de.mb;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

import de.awk.veranstaltungsverwaltung.facade.IVeranstaltungsverwaltungFacade;


@ManagedBean(name="veranstaltungAnlegenMB")
@RequestScoped
public class VeranstaltungAnlegenMB {

@EJB
IVeranstaltungsverwaltungFacade veranstaltungsverwaltungFacade;

private String name;
private String bezeichnung;

private String semester;
private int maxTeilnehmer;

public void veranstaltungAnlegen() {
    System.out.println("veranstaltungAnlegen() aufgerufen in VeranstaltungAnlegenMB");
    this.veranstaltungsverwaltungFacade.getVeranstaltungAnlegen().veranstaltungAnlegen(this.name, 
            this.bezeichnung, this.maxTeilnehmer, this.semester);
}

public String getName() {
    return name;
}

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

public String getBezeichnung() {
    return bezeichnung;
}

public void setBezeichnung(String bezeichnung) {
    this.bezeichnung = bezeichnung;
}

public String getSemester() {
    return semester;
}

public void setSemester(String semester) {
    this.semester = semester;
}

public int getMaxTeilnehmer() {
    return maxTeilnehmer;
}

public void setMaxTeilnehmer(int maxTeilnehmer) {
    this.maxTeilnehmer = maxTeilnehmer;
}
}

ManagedBean有一个方法veranstaltungAnlegen(),在那里我调用我的类VeranstaltungsverwaltungFacade(一个无状态bean),它实现了一个本地bean接口。 VeranstaltungsverwaltungFacade班级持有我的用例。我的用例都是无状态bean,也实现了本地bean接口。

在这里,您可以看到我的一个用例类。

package de.awk.veranstaltungsverwaltung.usecase.impl;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import de.awk.veranstaltungsverwaltung.dao.VeranstaltungDAO;
import de.awk.veranstaltungsverwaltung.model.Veranstaltung;
import de.awk.veranstaltungsverwaltung.usecase.ILehrveranstaltungAnlegen;

@Stateless
public class LehrveranstaltungAnlegenImpl implements  ILehrveranstaltungAnlegen {

@EJB
private VeranstaltungDAO veranstaltungDAO;

public LehrveranstaltungAnlegenImpl() {

}

@Override
public void veranstaltungAnlegen(String name, String bezeichnung, int maxTeilnehmer, String semester) {
    System.out.println(toString() + " starte Methode veranstaltungAnlegen(...)");
    Veranstaltung aVeranstaltung = new Veranstaltung(name, bezeichnung, maxTeilnehmer, semester);
    System.out.println("Veranstaltung: " + aVeranstaltung.getV_name() + " erstellt");
    veranstaltungDAO.save(aVeranstaltung);
    System.out.println(toString() + " veranstaltungAnlegen(String name, String bezeichnung, "
            + "int maxTeilnehmer, String semester)");
}

@Override
public String toString() {
    return "LehrveranstaltungAnlegenImpl";
}
}

我的用例有我的DAO课程。当我尝试保存/持久化我的新实体时,我得到一个NullPointerException。我调试了我的程序,发现我的变量veranstaltungDAO尚未初始化 - >空值。但我不知道为什么,因为我在我的控制台中看到VeranstaltungDAO已经部署。

' [org.jboss.as.ejb3.deployment](MSC服务主题1-4)WFLYEJB0473:名为' VeranstaltungDAO'的会话bean的JNDI绑定在部署中......'

在这里你可以看到我的DAO课程:

import javax.ejb.Stateless;

import de.awk.dao.GenericDAO;
import de.awk.veranstaltungsverwaltung.model.Veranstaltung;

@Stateless
public class VeranstaltungDAO extends GenericDAO<Veranstaltung>{

public VeranstaltungDAO() {
    super(Veranstaltung.class);
}
}

在这里,您可以看到我的实体类:

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;


import java.io.Serializable;

@Entity
@Access(AccessType.FIELD)
public class Veranstaltung implements Serializable{

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="V_ID")
@SequenceGenerator(name="V_ID", sequenceName="SEQ_VERANSTALTUNG_ID", allocationSize=1)
private int v_id;
private String v_name;
private String v_bezeichnung;
private int max_Teilnehmer;
private String semester;

@ElementCollection
private List<String> studenten;

private String dozent;

@OneToMany
@JoinTable(name="Veranstaltung_Hausarbeit",
    joinColumns=@JoinColumn(name="v_id", referencedColumnName="v_id"),
    inverseJoinColumns=@JoinColumn(name="h_id", referencedColumnName="h_id"))
private List<Hausarbeit> hausarbeitenliste;

@OneToMany
@JoinTable(name="Veranstaltung_Dokument",
joinColumns=@JoinColumn(name="v_id", referencedColumnName="v_id"),
inverseJoinColumns=@JoinColumn(name="d_id", referencedColumnName="d_id"))
private List<VeranstaltungDokument> dokumentenliste;

public Veranstaltung() {
}

public Veranstaltung(String v_name, String v_bezeichnung, int max_Teilnehmer, String semester) {
    this.v_name = v_name;
    this.v_bezeichnung = v_bezeichnung;
    this.max_Teilnehmer = max_Teilnehmer;
    this.semester = semester;
    this.dozent = "bla";
    this.hausarbeitenliste = new ArrayList<Hausarbeit>();
    this.dokumentenliste = new ArrayList<VeranstaltungDokument>();
    this.studenten = new ArrayList<String>();
}

public List<Hausarbeit> getHausarbeitenliste() {
    return hausarbeitenliste;
}

public void setHausarbeitenliste(List<Hausarbeit> hausarbeitenliste) {
    this.hausarbeitenliste = hausarbeitenliste;
}

public List<VeranstaltungDokument> getDokumentenliste() {
    return dokumentenliste;
}

public void setDokumentenliste(List<VeranstaltungDokument> dokumentenliste) {
    this.dokumentenliste = dokumentenliste;
}

public List<String> getStudenten() {
    return studenten;
}

public void setStudenten(List<String> studenten) {
    this.studenten = studenten;
}

public void addStudent(String student) {
    this.studenten.add(student);
}

public int getV_id() {
    return v_id;
}

public void setV_id(int v_id) {
    this.v_id = v_id;
}

public String getV_name() {
    return v_name;
}

public void setV_name(String v_name) {
    this.v_name = v_name;
}

public String getV_bezeichnung() {
    return v_bezeichnung;
}

public void setV_bezeichnung(String v_bezeichnung) {
    this.v_bezeichnung = v_bezeichnung;
}

public int getMax_Teilnehmer() {
    return max_Teilnehmer;
}

public void setMax_Teilnehmer(int max_Teilnehmer) {
    this.max_Teilnehmer = max_Teilnehmer;
}

public String getSemester() {
    return semester;
}

public void setSemester(String semester) {
    this.semester = semester;
}

public String getDozent() {
    return dozent;
}

public void setDozent(String dozent) {
    this.dozent = dozent;
}

public void addHausarbeit(Hausarbeit addHausarbeit) {
    this.hausarbeitenliste.add(addHausarbeit);
}
}

我希望你们能帮帮我。

My GenericsDAO扩展了我的班级VeranstaltungDAO

import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;

public abstract class GenericDAO<T> {
private final static String UNIT_NAME = "EJB_JPA_LearningPortal";

@PersistenceContext(unitName = UNIT_NAME)
private EntityManager em;

private Class<T> entityClass;

public GenericDAO(){}

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

protected void delete(Object id, Class<T> classe) {
    T entityToBeRemoved = em.getReference(classe, id);
    em.remove(entityToBeRemoved);
}

public T update(T entity) {
    return em.merge(entity);
}

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

public T find(int entityID) {
    return em.find(entityClass, entityID);
}

// Using the unchecked because JPA does not have a
// em.getCriteriaBuilder().createQuery()<T> method
@SuppressWarnings({ "unchecked", "rawtypes" })
public List<T> findAll() {
    CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
    cq.select(cq.from(entityClass));
    return em.createQuery(cq).getResultList();
}

// Using the unchecked because JPA does not have a
// ery.getSingleResult()<T> method
@SuppressWarnings("unchecked")
protected T findOneResult(String namedQuery, Map<String, Object> parameters) {
    T result = null;
    try {
    Query query = em.createNamedQuery(namedQuery);
        // Method that will populate parameters if they are passed not null and empty
        if (parameters != null && !parameters.isEmpty()) {
            populateQueryParameters(query, parameters);
        }

        result = (T) query.getSingleResult();

    } catch (Exception e) {
        System.out.println("Error while running query: " + e.getMessage());
        e.printStackTrace();
    }

    return result;
}

private void populateQueryParameters(Query query, Map<String, Object> parameters) {

    for (Entry<String, Object> entry : parameters.entrySet()) {
        query.setParameter(entry.getKey(), entry.getValue());
    }
}

public T findByString(String entityID) {
    return em.find(entityClass, entityID);
}

}

在这里你可以看到我的堆栈跟踪,我不知道如何更好地格式化它......

15:15:59,433警告[javax.enterprise.resource.webcontainer.jsf.lifecycle](默认任务-11)java.lang.NullPointerException:javax.el.E​​LException:java.lang.NullPointerException     at com.sun.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:187)     在com.sun.el.parser.AstValue.invoke(AstValue.java:289)     at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)     在org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)     在org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)     在javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)     在javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)     在javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)     在javax.faces.component.UICommand.broadcast(UICommand.java:300)     在javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)     在javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)     at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)     在com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)     在com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)     在javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)     at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)     在io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)     at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)     at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)     at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)     at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)     at io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)     at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:51)     at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)     at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)     at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:56)     at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)     at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)     at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)     at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)     在org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)     at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:284)     at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:263)     at io.undertow.servlet.handlers.ServletInitialHandler.access $ 000(ServletInitialHandler.java:81)     at io.undertow.servlet.handlers.ServletInitialHandler $ 1.handleRequest(ServletInitialHandler.java:174)     at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)     at io.undertow.server.HttpServerExchange $ 1.run(HttpServerExchange.java:793)     在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)     at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)     在java.lang.Thread.run(Thread.java:745) 引起:java.lang.NullPointerException     at de.awk.veranstaltungsverwaltung.usecase.impl.LehrveranstaltungAnlegenImpl.veranstaltungAnlegen(LehrveranstaltungAnlegenImpl.java:26)     at de.mb.VeranstaltungAnlegenMB.veranstaltungAnlegen(VeranstaltungAnlegenMB.java:25)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:497)     at com.sun.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:181)     ... 44更多

15:15:59,442 SEVERE [javax.enterprise.resource.webcontainer.jsf.context](默认任务-11)java.lang.NullPointerException     at de.awk.veranstaltungsverwaltung.usecase.impl.LehrveranstaltungAnlegenImpl.veranstaltungAnlegen(LehrveranstaltungAnlegenImpl.java:26)     at de.mb.VeranstaltungAnlegenMB.veranstaltungAnlegen(VeranstaltungAnlegenMB.java:25)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:497)     at com.sun.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:181)     在com.sun.el.parser.AstValue.invoke(AstValue.java:289)     at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)     在org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)     在org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)     在javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)     在javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)     在javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)     在javax.faces.component.UICommand.broadcast(UICommand.java:300)     在javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)     在javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)     at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)     在com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)     在com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)     在javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)     at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)     在io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)     at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)     at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)     at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)     at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)     at io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)     at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:51)     at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)     at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)     at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:56)     at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)     at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)     at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)     at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)     在org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)     at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:284)     at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:263)     at io.undertow.servlet.handlers.ServletInitialHandler.access $ 000(ServletInitialHandler.java:81)     at io.undertow.servlet.handlers.ServletInitialHandler $ 1.handleRequest(ServletInitialHandler.java:174)     at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)     at io.undertow.server.HttpServerExchange $ 1.run(HttpServerExchange.java:793)     在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)     at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)     在java.lang.Thread.run(Thread.java:745)

0 个答案:

没有答案