Metódo findAll() Gerando NullPointer

6 respostas
manolo

Bom tarde a todos!

Pessoal estou com uma duvida de arrancar os cabelos... É serio mesmo rsrs..

O cenário é o seguinte, tenho uma comboBox na qual quero popular com valores vindo do banco (nada surreal até agora), mas o problema que existe um nullPointer sendo disparado incessivamente.

Já tentei criar três metodos com a mesma função, mas o problema ainda ocorre.

Abaixo vou demostrar as classes:

.xhtml:

<p:selectOneMenu id="som1" required="true" requiredMessage="Por favor, selecione um colaborador"
                                                                 value="#{controlEmployeeMB.sysUser.idsystemUser}">
                                                    <f:selectItem itemLabel="Selecione um Colaborador" itemValue="0"/>  
                                                    <f:selectItems value="#{controlEmployeeMB.listSystemUser}"/>  
                                                </p:selectOneMenu>

MB:

@ManagedBean
public class ControlEmployeeMB {

    private SystemUser sysUser = new SystemUser();
    private SystemUser selectecdSystemUser = new SystemUser();
    private List<SystemUser> listSystemUser;

  //getter e setters

    public List<SystemUser> getListSystemUser() {
        if (this.listSystemUser == null) {
            SystemUserDAO sys = new SystemUserDAO();
            this.listSystemUser = sys.findAll(); //chamado do metodo que retorno os registros para popular a combo
        }
        return listSystemUser;

DAO Generico:

abstract class GenericDAO<T> implements Serializable {

    public static final long serialVersionUID = 1L;
    private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("CahiPU");
    private EntityManager em;
    private Class<T> entityClass;

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

    public void beginTransaction() {
        em = emf.createEntityManager();
        em.getTransaction().begin();
    }

   //Metodos CRUD

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

    }

Bem eu crie um método que tenta realizar a mesma coisa, mas com a diferença que ele utiliza uma namedQuery:

@SuppressWarnings("unchecked")
     public List<T> getSystemFindAll() {
     return this.em.createNamedQuery("SystemUser.findAll")
     .getResultList();
     }

Com o método acima também deu nullPointer

Será que alguem poderia me dar uma força? Não sei mais o que posso tentar fazer.

Agradeço desde já a atenção e colaboração de vocês.

Abraço :D

6 Respostas

Andre_Fonseca
manolo:
Bom tarde a todos!

Pessoal estou com uma duvida de arrancar os cabelos... É serio mesmo rsrs..

O cenário é o seguinte, tenho uma comboBox na qual quero popular com valores vindo do banco (nada surreal até agora), mas o problema que existe um nullPointer sendo disparado incessivamente.

Já tentei criar três metodos com a mesma função, mas o problema ainda ocorre.

Abaixo vou demostrar as classes:

.xhtml:

<p:selectOneMenu id="som1" required="true" requiredMessage="Por favor, selecione um colaborador"
                                                                 value="#{controlEmployeeMB.sysUser.idsystemUser}">
                                                    <f:selectItem itemLabel="Selecione um Colaborador" itemValue="0"/>  
                                                    <f:selectItems value="#{controlEmployeeMB.listSystemUser}"/>  
                                                </p:selectOneMenu>

MB:

@ManagedBean
public class ControlEmployeeMB {

    private SystemUser sysUser = new SystemUser();
    private SystemUser selectecdSystemUser = new SystemUser();
    private List<SystemUser> listSystemUser;

  //getter e setters

    public List<SystemUser> getListSystemUser() {
        if (this.listSystemUser == null) {
            SystemUserDAO sys = new SystemUserDAO();
            this.listSystemUser = sys.findAll(); //chamado do metodo que retorno os registros para popular a combo
        }
        return listSystemUser;

DAO Generico:

abstract class GenericDAO<T> implements Serializable {

    public static final long serialVersionUID = 1L;
    private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory("CahiPU");
    private EntityManager em;
    private Class<T> entityClass;

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

    public void beginTransaction() {
        em = emf.createEntityManager();
        em.getTransaction().begin();
    }

   //Metodos CRUD

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

    }

Bem eu crie um método que tenta realizar a mesma coisa, mas com a diferença que ele utiliza uma namedQuery:

@SuppressWarnings("unchecked")
     public List<T> getSystemFindAll() {
     return this.em.createNamedQuery("SystemUser.findAll")
     .getResultList();
     }

Com o método acima também deu nullPointer

Será que alguem poderia me dar uma força? Não sei mais o que posso tentar fazer.

Agradeço desde já a atenção e colaboração de vocês.

Abraço :D

Oi,

A variável em não está nula não? Onde você está chamando o método beginTransaction?

Alias, você não poderia usar outra coisa pra controlar a transação como por exemplo o Spring?

Abs

Hebert_Coelho

Qual a linha do nullpointer?

O que está null?

douglas_arantes

Qual a mensagem de erro?

manolo

Pessoal, deu certo! Realmente eu não estava chamando o beginTransaction()!

Obrigado por ter me alertado André Fonseca.

Será que posso tomar a liberdade e realizar outra pergunta?

Obrigado pela resposta de todos.

Andre_Fonseca

manolo:
Pessoal, deu certo! Realmente eu não estava chamando o beginTransaction()!

Obrigado por ter me alertado André Fonseca.

Será que posso tomar a liberdade e realizar outra pergunta?

Obrigado pela resposta de todos.

oi,

Fica a vontade pra perguntar, tenta dar uma lida no link que está na minha assinatura, sobre como fazer perguntas, sempre ajuda (vira e mexe eu mesmo leio 8) )

Fica de novo a sugestão, depois tente usar algum framework para gerenciar a sua transação , como por exemplo o Spring.

manolo

Oi André Fonseca, vou dar uma boa olhada mesmo neste link! Não quero queimar o filme aqui com o pessoal.

Sobre a pergunta eu vou tentar quebrar mais a cabeça aqui , se pintar de não conseguir fazer eu abro um novo tópico.

Com relação ao Spring, vou ver se começo a aprender a programar com ele. Valeu pela dica

Abraço

Criado 1 de dezembro de 2012
Ultima resposta 1 de dez. de 2012
Respostas 6
Participantes 4