2
respostas

Método de pesquisa para mais de um cliente

Vi nessa aula que é apresentado somente o método find, no qual busca apenas um cliente, de acordo com o id. E caso queira fazer uma pesquisa geral pelo nome por exemplo, como se faz com uso do método ArrayList, como seria com o hibernate ?

2 respostas

Olá Andrei, tudo bem?

Imaginando que a nossa lista seria do objeto Conta e que vc já tenha um EntityManager que chamamos de manager, seu código ficaria mais ou menos assim:

public List<Conta> lista() {
    return this.manager.createQuery("select c from Conta c").getResultList();
}

Eai Andrei, beleza?

Então, para conseguir executar a sua pesquisa você teria que criar uma query customizada ou usar o Criteria, que é uma API do hibernate para fazer esse tipo de busca.

Como eu acho o Criteria muito verboso eu desaconselho o uso dessa API para buscas simples.

No seu caso teriamos que escrever a query na mão, que também não é nada muito complicado olha só como ficaria:

public List<Cliente> buscaPor(String nome){
    return this.manager.createQuery("select c from Cliente c where c.nome like :nome", Cliente.class)
.setParamater("nome", "%" + nome + "%")
.getResultList();
}

Explicando um pouco:

Nosso método recebe o nome pelo qual vamos pesquisar na nossa tabela de clientes, ele devolve uma lista de clientes que possui aquele nome.

Para criar a nossa query usamos o método createQuery() do nosso EntityManager e nessa query "selecionamos" todos os clientes que possuem no seu nome o valor da String nome passada no parâmetro do método.

No método setParamater() passamos primeiro a String que representa nossa variavel na query e o valor que ela tem. Os "%" antes e depois da variavel nome são para falar que não importa a posição, se for achado o valor da variavel nome dentro do nome do cliente, esse cliente vai ser retornado.

E o getResultList() é para devolver a lista.

Faz sentido Andrei? Bons estudos!