[RESOLVIDO] - Método findById lançando Null Pointer Exception

3 respostas
getAdicted

Bom dia pessoal,

Eu fiz a pesquisa na net, mas ainda não consegui a solução para o meu problema, gostaria da ajuda de vocês. Os métodos do GenericDAO estão funcionando perfeitamente, com excessão do findById, que lança uma NPE.

Eu depurei o código, mas por não ter muita afinidade com Generics, não consegui desvendar o misterio. Seguem os códigos:

cadastro-usuario.xhtml:
<h:selectOneMenu value="#{usuarioBean.idperfil}">
						<f:selectItems value="#{perfilBean.listaPerfis}" var="perfil"
							itemLabel="#{perfil.nome}" itemValue="#{perfil.idperfil}" />
					</h:selectOneMenu>
UsuarioBean.java:
package br.com.pirralhos.view;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import br.com.pirralhos.config.BeanFactory;
import br.com.pirralhos.model.dao.base.GenericDAO;
import br.com.pirralhos.model.entity.Perfil;
import br.com.pirralhos.model.entity.Usuario;

@ManagedBean(name = "usuarioBean")
@SessionScoped
public class UsuarioBean implements Serializable {

	private static final long serialVersionUID = 1L;
	private GenericDAO<Usuario, Integer> usuarioDAO = (GenericDAO<Usuario, Integer>) BeanFactory
			.getBean("usuarioDAO");
	private GenericDAO<Perfil, Integer> perfilDAO = (GenericDAO<Perfil, Integer>) BeanFactory
			.getBean("perfilDAO");
	private Usuario usuario = new Usuario();
	private Usuario usuarioLogado;
	private Integer idperfil;
	private Perfil perfil = new Perfil();

	public UsuarioBean() {
		atualizarTela();
		setUsuarioLogado(null); 
	}

	public void gravar() {
		Perfil fkPerfil = this.getPerfilDAO().findById(this.idperfil);
		this.usuario.setFkPerfil(fkPerfil);
		this.getUsuarioDAO().save(this.usuario);
		this.usuario = new Usuario();
	}

	private void atualizarTela() {
		setUsuario(new Usuario());
	}

	public void login() {
		List<Usuario> usuarios = getUsuarioDAO().findBySQL(
				"from Usuario where idusuario='" + usuario.getIdusuario() + "'"
						+ "and senha='" + usuario.getSenha() + "'");
		if (usuarios != null && usuarios.size() == 0) {
			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage("Usuário ou Senha Inválido"));
		}
		if (usuarios.size() == 1) {
			FacesContext.getCurrentInstance().getExternalContext()
					.getSessionMap()
					.put("ID_USUARIO", usuarios.get(0).getIdusuario());
		}
	}

	public String logout() {
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.remove("ID_USUARIO");
		setUsuarioLogado(null);
		return "home";
	}

	public GenericDAO<Usuario, Integer> getUsuarioDAO() {
		return usuarioDAO;
	}

	public void setUsuarioDAO(GenericDAO<Usuario, Integer> usuarioDAO) {
		this.usuarioDAO = usuarioDAO;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Usuario getUsuarioLogado() {
		return usuarioLogado;
	}

	public void setUsuarioLogado(Usuario usuarioLogado) {
		this.usuarioLogado = usuarioLogado;
	}

	public Integer getIdperfil() {
		return idperfil;
	}

	public void setIdperfil(Integer idperfil) {
		this.idperfil = idperfil;
	}

	public Perfil getPerfil() {
		return perfil;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

	public GenericDAO<Perfil, Integer> getPerfilDAO() {
		return perfilDAO;
	}

	public void setPerfilDAO(GenericDAO<Perfil, Integer> perfilDAO) {
		this.perfilDAO = perfilDAO;
	}

}
GenericDAOImpl.java:
package br.com.pirralhos.model.dao.base.impl;

import java.io.Serializable;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import br.com.pirralhos.model.dao.base.GenericDAO;

public class GenericDAOImpl<T, ID extends Serializable> extends
		HibernateDaoSupport implements GenericDAO<T, ID>, Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static Log LOG = LogFactory.getLog(GenericDAOImpl.class);

	@SuppressWarnings("unchecked")
	public GenericDAOImpl(String className) throws ClassNotFoundException {
		this.persistentClass = (Class<T>) Class.forName(className);

	}

	private Class<T> persistentClass;

	public Class<T> getPersistentClass() {
		return this.persistentClass;
	}

	@Override
	public void delete(T entity) {
		try {
			this.getHibernateTemplate().delete(entity);
		} catch (final HibernateException ex) {
			GenericDAOImpl.LOG.error(ex);
			throw convertHibernateAccessException(ex);
		}
	}

	@Override
	public T findById(ID id) {
		try {
			return this.getHibernateTemplate().get(getPersistentClass(), id);
		} catch (final HibernateException ex) {
			GenericDAOImpl.LOG.error(ex);
			throw convertHibernateAccessException(ex);
		}
	}

	@Override
	public List<T> listAll() {
		try {
			return this.getHibernateTemplate().loadAll(getPersistentClass());
		} catch (final HibernateException ex) {
			GenericDAOImpl.LOG.error(ex);
			throw convertHibernateAccessException(ex);
		}
	}

	@Override
	public T save(T entity) {
		try {
			this.getHibernateTemplate().saveOrUpdate(entity);
			return entity;
		} catch (final HibernateException ex) {
			GenericDAOImpl.LOG.error(ex);
			throw convertHibernateAccessException(ex);
		}
	}

	@SuppressWarnings("unchecked")
	public List<T> findByCriteria(Criterion... criterion) {
		Session session = null;
		try {
			session = this.getHibernateTemplate().getSessionFactory()
					.openSession();
			Criteria crit = session.createCriteria(getPersistentClass());
			for (Criterion c : criterion) {
				crit.add(c);
			}
			return crit.list();
		} catch (final HibernateException ex) {
			GenericDAOImpl.LOG.error(ex);
			throw convertHibernateAccessException(ex);
		} finally {
			session.close();
		}
	}

	@SuppressWarnings("unchecked")
	public List<T> findBySQL(String sql) {
		Session session = null;
		try {
			session = this.getHibernateTemplate().getSessionFactory()
					.openSession();
			Query q = session.createQuery(sql);
			return q.list();
		} catch (final HibernateException ex) {
			GenericDAOImpl.LOG.error(ex);
			throw convertHibernateAccessException(ex);
		} finally {
			session.close();
		}
	}

}

Desde já muito obrigado e um ótimo fds a todos!

[]'s

3 Respostas

luxu

kra NPE se dá qdo o objeto retorna nulo, ou seja, naum foi instanciado, v ai o q pode ser…

A

cara,

o metodo get retorna null se nao achar nada, vc pode usar o metodo load.

t+

getAdicted

Bom dia,

Obrigado alissonvla e luxu, o problema não estava na persistência, por que para outros casos funcionou.

Boa semana para vocês!

[]'s

Criado 22 de outubro de 2011
Ultima resposta 24 de out. de 2011
Respostas 3
Participantes 3