Obtenir toutes les données d’une table avec Hibernate

Obtenir toutes les données d'une table avec Hibernate

1. Vue d'ensemble

Dans ce rapide tutoriel, nous verrons comment extraire toutes les données d’une table avec Hibernate à l’aide de JPQL ou de l’API Criteria.

JPQL nous fournit une implémentation plus rapide et plus simple tandis que l’API Criteria est plus dynamique et robuste.

2. JPQL

JPQL fournit un moyen simple et direct d'obtenir toutes les entités d'une table.

Voyons à quoi cela pourrait ressembler de récupérer tous les élèves d'une table à l'aide de JPQL:

public List findAllStudentsWithJpql() {
    return session.createQuery("SELECT a FROM Student a", Student.class).getResultList();
}

La méthodecreateQuery() de notre session Hibernate reçoit une chaîne de requête saisie comme premier argument et le type de l’entité comme second. Nous exécutons la requête avec un appel à la méthodegetResultList() qui renvoie les résultats sous forme deList typé.

Simplicity is the advantage of this approach. JPQL est très proche de SQL, et est donc plus facile à écrire et à comprendre.

3. API de critères

LeCriteria API fournit une approche dynamique pour la création de requêtes JPA.

Cela nous permet de créer des requêtes en instanciant des objets Java représentant des éléments de requête. Et c'est une solution plus propre si les requêtes sont construites à partir de nombreux champs facultatifs, car elle élimine de nombreuses concaténations de chaînes.

Nous venons de voir une requête select-all utilisant JPQL. Jetons un coup d'œil à son équivalent à l'aide de l'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();
}

Tout d'abord, nous obtenons unCriteriaBuilder que nous utilisons pour créer unCriteriaQuery typé. Ensuite, nous définissons l’entrée racine de la requête. Et enfin, nous l'exécutons avec une méthodegetResultList().

Maintenant, cette approche est similaire à ce que nous avons fait plus tôt. But, it gives us complete access to the Java language to articulate greater nuance in formulating the query.

En plus d'être similaires, les requêtes JPQL et les requêtes basées sur des critères JPA ont des performances équivalentes.

4. Conclusion

Dans cet article, nous avons montré comment extraire toutes les entités d'une table à l'aide de JPQL ou de l'API Criteria.

Le code source complet de l'exemple est disponibleover on GitHub.