em.createQuery blijft null terugkeren

Ik heb deze applicatie die ik gebruik JSF 2.0 en EclipseLink, ik heb entiteiten gemaakt voor een database gemaakt in MySQL, deze entiteiten aangemaakt met behulp van netbeans 7.1.2, het wordt automatisch aangemaakt.

Dan gebruik ik sessiebonen om met deze entiteiten te werken, het ding is dat de em.createQuery altijd een null retourneert, hoewel ik NamedQueries in de entiteiten heb gecontroleerd en ze perfect matchen

een voorbeeld van de entiteiten genaamd queries: -

@NamedQueries({
    @NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
    @NamedQuery(name = "Users.findByUserId", query = "SELECT u FROM Users u WHERE u.userId = :userId"),
    @NamedQuery(name = "Users.findByUsername", query = "SELECT u FROM Users u WHERE u.username = :username"),
    @NamedQuery(name = "Users.findByEmail", query = "SELECT u FROM Users u WHERE u.email = :email"),

merk op hoe ik deze findByEmail-query in de sessieboon gebruik:

public Users findByEmail(String email){
        em.getTransaction().begin();
        String find = "Users.findByEmail";
        Query query = em.createNamedQuery(find);
        query.setParameter("email", email);
        Users user = (Users) query.getSingleResult();

maar het keert altijd null terug van dit em.createNamedQuery, ik probeerde eerst .createQuery, maar het had ook geen zin.

de stacktrace van de uitzondering

Caused by: java.lang.NullPointerException
    at com.readme.entities.sessionBeans.UsersFacade.findByEmail(UsersFacade.java:48)
    at com.readme.user.signup.SignupBean.checkAvailability(SignupBean.java:137)
    at com.readme.user.signup.SignupBean.save(SignupBean.java:146)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)

Wat lijkt hier het probleem te zijn?

2
Dit probleem houdt geen verband met JSF.
toegevoegd de auteur Luiggi Mendoza, de bron
Hoe verkrijgt u de EntityManager ?
toegevoegd de auteur Piotr Nowicki, de bron
Ik gebruikte @PersistenceContext-annotatie om de em te krijgen
toegevoegd de auteur engma, de bron

1 antwoord

Als em.createNamedQuery (find) echt de uitspraak is die NullPointerException in jouw geval genereert, dan gebeurt er iets vreemds.

Hoogstwaarschijnlijk wordt NullPointerException gegenereerd wanneer u voor de eerste keer em gebruikt in em.getTransaction (). Begin() . Als dat het geval is, dan is een zeer algemene reden dat uw entiteitbeheerder niet wordt geïnjecteerd, omdat injectie alleen in beheerde klassen werkt (voor details, raadpleeg deze vraag ). Als u via een nieuwe bewerking een sessieboon hebt gemaakt, wordt deze niet beheerd.

Andere veel voorkomende reden is dat @Persistenceontext annotatie gewoon ontbreekt.

1
toegevoegd
ik heb alles geprobeerd, maar het blijft deze fout vertonen, raar is ook dat het werkte voordat ik de database update
toegevoegd de auteur engma, de bron