Boa tarde pessoal. Estou com uma dúvida pra pesquisar no banco por uma String, eu usei pra pesquisar por um inteiro assim Pessoa pessoa = (Pessoa) sessao.load(Pessoa.class, 1);
, nesse caso ele pesquisa pela Id, gostaria de saber como que faço pra pesquisar pelo nome da Pessoa por exemplo.
Você pode usar Criteria.
List<Pessoa> pessoas = session.createCriteria(Pessoa.class)
.add(Restrictions.ilike("nome", "Fulano de tal", MatchMode.ANYWHERE)) //nome é o atributo do seu objeto Pessoa e ANYWHERE pede para pesquisar em qualquer parte do nome ignorando miúsculas e minúsculas.
.addOrder(Order.asc("nome")) //Retorna uma lista ordenada pelo nome das pessoas
.list();
vc pode usar Criteria ou HQL.
Com hql ficaria parecido com o seguinte codigo:
Query query = session.createQuery("select p from Pessoa where nome like :param1 ");
query.setString("param1", "Fulano de tal");
List pessoas = query.list();
Ou então se vc quizer uma estrutura genérica/dinâmica, vc pode olhar o meu projeto de Filter, no link abaixo:
http://www.guj.com.br/java/221618-filter-dinamico-para-hibernate
Com o meu projeto ficaria algo assim:
Filter filter = FactoryFilter.createFilter("nome","Fulano de tal");
filter.addOrder(new Order("nome", Order.DESC));
List<Pessoa> pessoas = pessoaDAO.find(filter);
ai se c vc quizer o mesmo filtro para uma classe chamada Cliente, ou qualquer outra quem tem a entidade nome seria usar do mesmo geito sem ter que criar na sua classe dao.
Filter filter = FactoryFilter.createFilter("nome","Fulano de tal");
filter.addOrder(new Order("nome", Order.DESC));
List<Cliente> clientes = clienteDAO.find(filter);