[RESOLVIDO] Busca por nome Hibernate

2 respostas
tati.mat.moreira

Olá pessoal,

estou tentando fazer uma pesquisa por nome no meu sistema, mas não estou conseguindo. Tentei usar Criteria e HQL, mas os dois não funcionam:
public class PessoaFisicaDao extends Dao<PessoaFisica>{

	private Session session;

	public PessoaFisicaDao(Session session, Class<?> classe) {
		super(session, classe);
	}

	public List<PessoaFisica> pesquisaPessoasFisicasByName(String nome){
	Criteria c = session.createCriteria(PessoaFisica.class);
	c.add(Restrictions.ilike("nome", nome));
	c.addOrder(Order.asc("nome"));
	c.setProjection(Projections.property("nome"));

	return c.list();
}

public List<PessoaFisica> pesquisaPessoasFisicasByName(String nome){
	Query q = session.createQuery("select f from " + PessoaFisica.class.getName() + " as f where f.nome like :nome");
	q.setParameter("nome", nome);
	
	List<PessoaFisica> lista = q.list();
	
	return lista;
...
}
Segue o DAO:
public class Dao<T> {

    private static Logger logger = Logger.getLogger(Dao.class);
    private Class persistentClass;
    private Session session;

    public Dao(Session session, Class persistentClass) {
        this.session = session;
        this.persistentClass = persistentClass;
    }

    @SuppressWarnings("unchecked")
    public T load(Long id) {
        logger.info("lendo " + persistentClass + " com id " + id);
        return (T) session.load(persistentClass, id);
    }

    public void save(T t) {
        logger.info("salvando  " + t);
        session.save(t);
    }
    
	public void delete(T t) {
		logger.info("Deletando " + t);
		session.delete(t);
	}
	
    @SuppressWarnings("unchecked")
	public List<T> list() {
		logger.info("Listando todos");
    	return session.createCriteria(persistentClass).list();
    }

    public void merge(T t) {
        logger.info("Salvando ou atualizando " + t);
        session.merge(t);
    }
}
Meu teste:
Session session = HibernateUtil.openSession();
		PessoaFisicaDao dao = new PessoaFisicaDao(session, PessoaFisica.class);

		List<PessoaFisica> fisicas = dao.pesquisaPessoasFisicasByName("%Maria");
		
		System.out.println(fisicas);
Erro:
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.getNameParser(Unknown Source) at org.hibernate.util.NamingHelper.bind(NamingHelper.java:75) at org.hibernate.impl.SessionFactoryObjectFactory.addInstance(SessionFactoryObjectFactory.java:113) at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:338) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1327) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at br.com.dao.HibernateUtil.(HibernateUtil.java:17) at br.com.test.PessoaFisicaTest.main(PessoaFisicaTest.java:79) Exception in thread "main" java.lang.NullPointerException at br.com.dao.PessoaFisicaDao.pesquisaPessoasFisicasByName(PessoaFisicaDao.java:53) at br.com.test.PessoaFisicaTest.main(PessoaFisicaTest.java:82)
Quando eu faço uma pesquisa normal, do tipo:
Session session = HibernateUtil.openSession();
		PessoaFisicaDao dao = new PessoaFisicaDao(session, PessoaFisica.class);

		System.out.println(dao.load(1l));
... funciona!

Onde estou errando?

2 Respostas

P

Como você cria o SessionFactory? Você está usando um container?

tati.mat.moreira

Resolvi…

meu PessoaFisicaDao estava estendendo DAO. Só tirei o extends e funcionou.

Criado 21 de janeiro de 2009
Ultima resposta 21 de jan. de 2009
Respostas 2
Participantes 2