Olá desenvolvedores, hoje iremos falar sobre o NamedQuery que é uma forma de realizar consulta, porém, sem precisar implementar queries por todo o código. O Named Query ou consulta nomeada do Hibernate é um conceito aplicado em que o programador não precisa espalhar consultas por todo o código Java.

Desse modo existem duas maneiras de definir consultas nomeadas no Hibernate, por anotação e mapeando o arquivo. Consultas nomeadas no Hibernate fazem uso das anotações @NamedQueries (usada para definir várias consultas nomeadas) e @NamedQuery (usada para definir uma única consulta nomeada).

A consulta nomeada por anotação é criada logo abaixo dos “imports”. Logo é preciso cuidado para não gerar códigos em excesso, por isso elas são utilizadas para consultas específicas, como realização de uma soma, carregar algum dado específico, entre outras especificidades.

Após criada as Queries utilizando consulta nomeada por anotação, por exemplo, poderemos chama-la de qualquer lugar da aplicação.

IMPLEMENTANDO NAMED QUERY

Criaremos a primeira Named Query na entidade “UsuarioPessoa”. Mas como iremos criar mais de uma, usaremos a anotação @NamedQueries, e dentro dela poderemos escrever várias @NamedQuery.

@NamedQueries({
@NamedQuey()
)}

Como a Named Query é chamada por um nome precisamos atribuir um nome a ela. É importante que este nome referencie a especificidade da Query. Assim, como escreveremos uma Query para consultar todos os registros da base de dados o nome atribuído a ela será “UsuarioPessoa.todos”.

Observe que para nomear a Query há um padrão a ser seguido, que é o nome da classe seguido do nome atribuído a Query. Este padrão é para orientar o programador, auxiliando-o a saber o local onde a Query foi originalmente implementada.

Depois de atribuir um nome, escrevemos a Query de fato. Ressaltando que a letra “u” utilizada na Query é o alias (apelido) que nos dispensa de conhecer todo o caminho físico até o arquivo na base de dados.

IMPLEMENTANDO O MÉTODO

Na classe de teste “testHibernate” criaremos um método que irá chamar e exibir a resposta da Query. No escopo do método instanciaremos o DaoGeneric, um padrão para “gerenciar” toda a lógica de persistência de dados de uma aplicação.

A classe DAO – Data Acces Object é a classe por meio do qual obteremos o Entity Manager. É por meio do Entity Manager que lemos e escrevemos em uma base de dados.

DaoGeneric <UsuarioPessoa> daoGeneric = new DaoGeneric<UsuarioPessoa>();

Se vamos exibir todos os registros do banco de dados, precisaremos de uma lista cujos dados deverão vir da entidade “UsuarioPessoa”.

A lista recebe o DaoGeneric, que por sua vez traz o Entity Manager, assim o createQuery enviará uma instrução SQL – Standard Query Language direto para o banco de dados. O procedimento de enviar uma instrução SQL diretamente para o banco de dados é especialmente útil quando se deseja utilizar recursos específicos, como o Named Query, cujo nome passaremos como argumento.

E se uma lista será retornada chamaremos o getResultList() para agrupar todos os dados.

Ainda no escopo do método implementaremos o “for each” para percorrer a lista de dados e exibi-los no console por meio da saída padrão System.out.

TESTETANDO O MÉTODO

Para “rodar” o teste selecione o nome do método que deseja executar, clique com o botão direito do mouse sobre ele >> Rum As >> JUnit test. Se após a execução do método, nenhum erro foi apresentado no console, basta então conferir na base de dados se o registro foi de fato excluído.

EM POUCAS PALAVRAS

A Query estabelece uma regra de negócio referente a classe na qual ela está implementada. Colocando uma vírgula após a @NamedQuery poderemos escrever dentro da @NamedQueries escrever uma segunda Query.

Nesta nova Query usaremos a passagem de parâmetros para fazer a consulta por nome.

Neste caso, a única diferença a ser implementada no método é que será necessário “setar” o parâmetro antes de agruparmos os dados por meio do getResultList(). Obviamente deveremos passar o nome correto da Query, mas este é um desafio para você resolver. Agora é a sua vez, implemente, teste, estude e programe.