Metódo findAll() Gerando NullPointer

[b]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:[/b]

<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:

[code]@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;[/code]

DAO Generico:

[code]abstract class GenericDAO 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;

}[/code]

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

[b]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 :smiley: [/b]

[quote=manolo][b]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:[/b]

<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:

[code]@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;[/code]

DAO Generico:

[code]abstract class GenericDAO 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;

}[/code]

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

[b]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 :smiley: [/b][/quote]

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

Qual a linha do nullpointer?

O que está null?

Qual a mensagem de erro?

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.

[quote=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.[/quote]

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.

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