Wyjątek "java.lang.NullPointerException" przy korzystaniu z JPA

0

Witajcie!

Próbuje w swojej aplikacji opartej na frameworku JSF, skorzystać z dobrodziejstw technologii JPA. Niestety przy próbie pobrania rekordów z bazy otrzymuje wyjątek: java.lang.NullPointerException

Klasa kmponentu:


@Stateless
public class ComponentsManager implements ComponentsService {

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

    public ComponentsManager() {
    }

    @Override
    public List getAll() {
        Query query = em.createQuery("SELECT c FROM Component c");
        return query.getResultList();
    }
}

Encja Component

@Entity
@Table(name = "component")
public class Component implements Serializable
{
    private int id;
    private String symbol;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public int getId()
    {
        return id;
    }

    public void setId(int id)
    {
        this.id = id;
    }

    @Basic
    public String getSymbol()
    {
        return symbol;
    }

    public void setSymbol(String symbol)
    {
        this.symbol = symbol;
    }
}

Co może być problemem Panowie i Panie ? Tabela w bazie 'component' na pewno istnieje.

Zauważyłem że gdy zmienie moje zapytanie query, wstawiając po FROM nie istniejącą encje. To wyjątek jest taki sam, stąd wniosek że moja encja nie jest widoczna. Ale jak to sprawdzić/naprawić ?

0

GDZIE ci leci ten wyjątek? Bo może jednak leci dlatego ze EntityManager sie nie wstrzyknął poprawnie (bo np. nazwa kontekstu jest inna...

0

Wyjątek dostaje w przeglądarce www.

Wydaje mi się że nazwa kontekstu jest taka sama jak w pliku persistance.xml

<?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="ProjectJSF1PU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>ProjectJSF1</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="eclipselink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
</persistence>

Jednak widzę że masz rację, kontener nie może wstrzyknąć obiektu EntityManager, pytanie dlaczego?

Po zastosowaniu tego kodu:

        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("ProjectJSF1PU");

        Query query = entityManagerFactory.createEntityManager().createQuery("SELECT c FROM Component c");
        return query.getResultList();

Działą poprawnie, wyniki są pobierane z bazy. Co w związku z tym może być nie tak z 1 rozwiązaniem? Przecież nazwy są kontekstu są takie same?

1 użytkowników online, w tym zalogowanych: 0, gości: 1