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;
...
}
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);
}
}
Session session = HibernateUtil.openSession();
PessoaFisicaDao dao = new PessoaFisicaDao(session, PessoaFisica.class);
List<PessoaFisica> fisicas = dao.pesquisaPessoasFisicasByName("%Maria");
System.out.println(fisicas);
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.Quando eu faço uma pesquisa normal, do tipo:(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)
Session session = HibernateUtil.openSession();
PessoaFisicaDao dao = new PessoaFisicaDao(session, PessoaFisica.class);
System.out.println(dao.load(1l));
Onde estou errando?