NPE beim Persistieren einer Entität

Diskutiere NPE beim Persistieren einer Entität im Data Tier Forum; Beim Persistieren eines neues Customer wird eine NPE geworfen und ich finde den Grund nicht. Warum wird hier toString aufgerufen? Wenn ich im...

  1. Raphalon
    Raphalon Neues Mitglied
    Beim Persistieren eines neues Customer wird eine NPE geworfen und ich finde den Grund nicht. Warum wird hier toString aufgerufen? Wenn ich im Customer das "getId()" aus der toString()-Methode nehme, dann geht es. Aber das kann nicht die Ursache des Problems sein.

    Code (Java):
     
    Code (Java):
    package de.org.grp.back;

    import de.org.grp.domain.Customer;
    import de.org.grp.sl.CustomerService;
    import javax.enterprise.inject.Model;
    import javax.inject.Inject;
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;
    import java.util.Collection;

    @Model
    public class Initializer {

        @Inject
        CustomerService custService;

        public void executeCustomerActivities() {
            Customer customer = null;
            customer = custService.createCustomer("Michael Green", 54321);
    }
    Code (Java):

    package de.org.grp.sl;
    import de.org.grp.domain.Customer;
    import javax.ejb.Stateless;
    import javax.inject.Inject;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;
    import java.util.Collection;

    @Stateless
    public class CustomerService {

        @PersistenceContext(unitName = "CustomerService")
        private EntityManager em;

        public Customer createCustomer(String name, long salary) {
            Customer customer = new Customer();
            customer.setName(name);
            customer.setSalary(salary);
            em.persist(customer);
            return customer;
        }

    }
    [XML]<persistence-unit name="CustomerService" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/DerbyJPACertDB</jta-data-source>
    <properties>
    <property name="eclipselink.target-server" value="SunAS9"/>
    <property name="eclipselink.target-database"
    value="org.eclipse.persistence.platform.database.DerbyPlatform"/>
    <property name="eclipselink.logging.level" value="ALL"/>
    <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
    <property name="eclipselink.ddl-generation.output-mode" value="both"/>
    </properties>
    </persistence-unit>
    </persistence>[/XML]
     
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. Marcinek
    Marcinek Guest
    Wie sieht die Methode getId () aus?
     
  4. KSG9|sebastian
    KSG9|sebastian Aktives Mitglied
    Vermutlich ist die ID null und durch dein Format-Pattern wird versucht null als (int) zu behandeln, was wiederum beu null zu einer NPE führt
     
  5. Raphalon
    Raphalon Neues Mitglied
    Die Entität Customer sieht folgendermaßen aus.

    Code (Java):
    package de.org.grp.domain;
    import javax.persistence.*;
    import java.io.Serializable;

    @Entity
    @NamedQuery(name = "findCustomerByName",
            query = "SELECT c FROM Customer c WHERE c.name = :nameParam")
    public class Customer implements Serializable {

        @Id
        @TableGenerator(name="CustIdGen",
                table="ID_CUSTOMER",
                pkColumnName="GEN_NAME",
                valueColumnName="GEN_VAL")
        @GeneratedValue(generator="CustIdGen")
        private Long id;

        @Column
        private String name;

        @Column
        private long salary;

        public Customer() { }

        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public long getSalary() {
            return salary;
        }
        public void setSalary(long salary) {
            this.salary = salary;
        }
        @Override
        public String toString() {
            return "Customer id: " + getId() + " name: " + getName() + " salary: " + getSalary();
        }
    }
     
  6. Sym
    Sym Guest
    Deine Getter/Setter sollen mit Long und nicht mit long arbeiten.
     
  7. Raphalon
    Raphalon Neues Mitglied
    Ja, mit Long läuft es. Kannst Du mir noch erläutern, warum ein Primitive an dieser Stelle einen solchen Fehler hervorruft?
     
    Zuletzt bearbeitet: 20. Jan. 2013
  8. KSG9|sebastian
    KSG9|sebastian Aktives Mitglied
    ID istvom Typ Long, der getter vom Typ long. Dadurch findet ein Ato-Unboxing statt, wass bei ID=null. zu einer NPE führt
     
Die Seite wird geladen...

NPE beim Persistieren einer Entität - Ähnliche Themen

HashSet, TreeSet: unregelmäßige Zahlenreihen beim Befüllen
HashSet, TreeSet: unregelmäßige Zahlenreihen beim Befüllen im Forum Java Basics - Anfänger-Themen
Werte beim Aufrufen des Fensters übernehmen (SceneBuilder)
Werte beim Aufrufen des Fensters übernehmen (SceneBuilder) im Forum AWT, Swing, JavaFX & SWT
Hilfe gesucht beim einstieg in Java und erste Aufgaben aus der Berufsschule
Hilfe gesucht beim einstieg in Java und erste Aufgaben aus der Berufsschule im Forum Java Basics - Anfänger-Themen
keyevent.VK_LEFT wird beim drücken jeder belibigen Taste aktiv.
keyevent.VK_LEFT wird beim drücken jeder belibigen Taste aktiv. im Forum Java Basics - Anfänger-Themen
GUI - Fehler abfangen beim Dividieren
GUI - Fehler abfangen beim Dividieren im Forum Java Basics - Anfänger-Themen
Thema: NPE beim Persistieren einer Entität