Obter todos os dados de uma tabela com o Hibernate
1. Visão geral
Neste tutorial rápido, veremos como obter todos os dados de uma tabela com o Hibernate usando o JPQL ou a API de critérios.
O JPQL nos fornece uma implementação mais rápida e simples, enquanto o uso da API de critérios é mais dinâmico e robusto.
2. JPQL
JPQL fornece uma maneira simples e direta de obter todas as entidades de uma tabela.
Vamos ver como seria recuperar todos os alunos de uma tabela usando JPQL:
public List findAllStudentsWithJpql() {
return session.createQuery("SELECT a FROM Student a", Student.class).getResultList();
}
O métodocreateQuery() da nossa sessão Hibernate recebe uma string de consulta digitada como o primeiro argumento e o tipo da entidade como o segundo. Executamos a consulta com uma chamada ao métodogetResultList() que retorna os resultados comoList digitado.
Simplicity is the advantage of this approach. JPQL é muito parecido com SQL e, portanto, mais fácil de escrever e entender.
3. API de critérios
OCriteria API fornece uma abordagem dinâmica para construir consultas JPA.
Ele nos permite criar consultas instanciando objetos Java que representam elementos de consulta. E é uma solução mais limpa se as consultas são construídas a partir de muitos campos opcionais, pois elimina muitas concatenações de string.
Acabamos de ver uma consulta selecionar tudo usando JPQL. Vamos dar uma olhada em seu equivalente usando a API Criteria:
public List findAllStudentsWithCriteriaQuery() {
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(Student.class);
Root rootEntry = cq.from(Student.class);
CriteriaQuery all = cq.select(rootEntry);
TypedQuery allQuery = session.createQuery(all);
return allQuery.getResultList();
}
Primeiro, obtemos umCriteriaBuilder que usamos para criar umCriteriaQuery digitado. Posteriormente, definimos a entrada raiz da consulta. E por último, o executamos com um métodogetResultList().
Agora, essa abordagem é semelhante ao que fizemos anteriormente. But, it gives us complete access to the Java language to articulate greater nuance in formulating the query.
Além de semelhantes, as consultas JPQL e as consultas baseadas em critérios JPA têm desempenho equivalente.
4. Conclusão
Neste artigo, demonstramos como obter todas as entidades de uma tabela usando JPQL ou API de critérios.
O código-fonte completo para o exemplo está disponívelover on GitHub.