Obter todos os dados de uma tabela com o Hibernate

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.